我的博客
欢迎来到我的博客
bunny.icu

第13章字符串

第13章字符串
  1. String对象是用final修饰的,每一个看起来修改String值的操作,实际上都是重新创建了一个String,包含修改后的字符串内容而最初的String对象则丝毫未动。
  2. 将字符串传递给方法,实际上传递的是引用的一个拷贝,而引用一直待在单一的物理位置上,从未动过。
  3. 用于String的“+”与“+=”是Java中仅有的两个重载过的操作符,Java不允许程序员重载任何操作符。
  4. 如果在toString()方法中进行比较复杂的操作,就要创建一个StringBuilder对象,用它来构造最终结果。StringBuilder是Java SE5中引入进来的,在此之前用的是StringBuffer,后者是线程安全的,效率比较低。StringBuilder提供了丰富的字符串操作方法:
方法 作用
append() 追加
toString() 转为String对象
insert() 在指定位置插入
replace() 在指定索引范围替换字串
subString() 返回指定索引范围或指定位置到终点的字串
reverse() 返回反向串
delete() 删除指定索引范围的子串
  1. 所有的类都有toString()方法,在标准容器类默认覆盖的toString()方法中,会对容器包含的每个对象调用toString()方法。如果想要表达容器本身,可以自己覆盖容器类的toString()方法,在里面使用this关键字。
  2. String类也包含许多方法,参考P288。String对象在调用方法时,String对象本身不会发生改变,如果需要改变,返回的就是一个新的String对象。
  3. Java有与C类似的printf()方法,可以进行格式化输出,占位符%d表示整数,%f表示浮点数,%c表示字符,%s表示字符串,没有%ld和%lf。
    System.out.format()与System.out.printf()时等价的,更多格式化占位符可参考:JAVA字符串格式化-String.format()的使用
  4. java.util.Formatter类有format()方法,可以对数据进行格式化输出。
  5. 这是我找到的一个不错的正则表达式手册
  6. 经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响。多数情况下StringBuffer比String好。
  7. String的equals()与StringBuilder的equals()方法不同,前者判断的是值相等,后者判断的是内存地址相同。
  8. 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=
---------------------------------

版权声明


本作品系原创, 转载须遵循 CC BY-NC-ND 4.0 许可协议
本文标题:第13章字符串
本文链接:https://www.bunny.icu/archives/1173

推荐文章

发表评论

textsms
account_circle
email

bunny.icu

第13章字符串
第13章字符串
扫描二维码继续阅读
2018-09-13