- String对象是用final修饰的,每一个看起来修改String值的操作,实际上都是重新创建了一个String,包含修改后的字符串内容而最初的String对象则丝毫未动。
- 将字符串传递给方法,实际上传递的是引用的一个拷贝,而引用一直待在单一的物理位置上,从未动过。
- 用于String的“+”与“+=”是Java中仅有的两个重载过的操作符,Java不允许程序员重载任何操作符。
- 如果在toString()方法中进行比较复杂的操作,就要创建一个StringBuilder对象,用它来构造最终结果。StringBuilder是Java SE5中引入进来的,在此之前用的是StringBuffer,后者是线程安全的,效率比较低。StringBuilder提供了丰富的字符串操作方法:
方法 | 作用 |
---|---|
append() | 追加 |
toString() | 转为String对象 |
insert() | 在指定位置插入 |
replace() | 在指定索引范围替换字串 |
subString() | 返回指定索引范围或指定位置到终点的字串 |
reverse() | 返回反向串 |
delete() | 删除指定索引范围的子串 |
- 所有的类都有toString()方法,在标准容器类默认覆盖的toString()方法中,会对容器包含的每个对象调用toString()方法。如果想要表达容器本身,可以自己覆盖容器类的toString()方法,在里面使用this关键字。
- String类也包含许多方法,参考P288。String对象在调用方法时,String对象本身不会发生改变,如果需要改变,返回的就是一个新的String对象。
- Java有与C类似的printf()方法,可以进行格式化输出,占位符%d表示整数,%f表示浮点数,%c表示字符,%s表示字符串,没有%ld和%lf。
System.out.format()与System.out.printf()时等价的,更多格式化占位符可参考:JAVA字符串格式化-String.format()的使用 - java.util.Formatter类有format()方法,可以对数据进行格式化输出。
- 这是我找到的一个不错的正则表达式手册。
- 经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响。多数情况下StringBuffer比String好。
- String的equals()与StringBuilder的equals()方法不同,前者判断的是值相等,后者判断的是内存地址相同。
- Java中常见的正则操作:
// 判断
String email = "1095151731@qq.com";
String pattern1 = "^\\w*@\\w*\\.\\w*$";
boolean isMatch = Pattern.matches(pattern1, email);
System.out.println(isMatch);
System.out.println("---------------------------------");
// 分割
String string2 = "1.2.3.4.5.6.7";
String pattern2 = "\\.";
String[] regexes = string2.split(pattern2);
for (String s : regexes) {
System.out.print(s + " ");
}
System.out.println();
System.out.println("---------------------------------");
// 匹配
String string3 = "10+20*30+40*50+60/70+80-90=";
Pattern pattern3 = Pattern.compile("(\\d*[*|/]\\d*)");
Matcher matcher3 = pattern3.matcher(string3);
while (matcher3.find()) {
System.out.println(matcher3.group());
}
System.out.println("---------------------------------");
// 匹配
String email4 = "a1095151731@qq.com";
Pattern pattern4 = Pattern.compile("@(\\w+).+");
Matcher m = pattern4.matcher(email4);
while (m.find()) {
// group()方法的参数可以指定是第几个括号中的值
System.out.print(m.group(1) + " ");
}
System.out.println();
System.out.println("---------------------------------");
// 替换
String string5 = "10+20*30+40*50+60/70+80-90=";
String pattern5 = "(\\d*[*|/]\\d*)";
String s = string5.replaceAll(pattern5, "aaa");
System.out.println(s);
System.out.println("---------------------------------");
输出:
true
---------------------------------
1 2 3 4 5 6 7
---------------------------------
20*30
40*50
60/70
---------------------------------
qq
---------------------------------
10+aaa+aaa+aaa+80-90=
---------------------------------
发表评论