Java基础——字符串

上一篇 / 下一篇  2015-01-18 17:22:43 / 个人分类:原创

13.1不可变String
对于String类的修改实际上是创建了一个全新的String类。只要改变字符串内容,String类的方法就会返回一个新的String对象。如果内容没有发生变化,则返回原来的引用。
传递一个String类型参数,也只是传递了一个引用的拷贝,方法结束了拷贝对象就消失了。也不会影响源对象。

13.2重载操作符“+”与StringBuilder
操作符+可用来链接String,但每链接一次会产生一个String对象。StringBuilder可以避免产生过多的对象。

StringBuilder与StringBuffer的区别:
StringBuffer是线程安全的,StringBuilder不是线程安全的,但是可以获得更好的性能。

13.3无意识的递归
例子:重写toString方法,返回字符串加对象的内存地址。
错误方法:返回值中this是以+连接,因此会调用this的toString方法,进而产生了递归
public String toString(){
return "InfiniteRecursion address : " +this+ "\n";
}
正确方法:因此应该考虑使用Object的toString方法
public String toString(){
return "InfiniteRecursion address : " +super.toString()+ "\n";
}

13.5格式化输出
System.out.printf()
System.out.format()
P325 类型转换字符
java.util.Formatter
创建Fomatter对象时需要向其构造器传递一些信息,告诉它最终的结果将向哪里输出(如:System.out
Formatter提供了对空格与对齐强大的控制能力。
String.format()是String类的static方法,接受与Formatter.format()方法一样的参数,但返回String对象。

13.6正则表达式
\\  正则表达式符号,其后的字符具有特殊意义。
? 有可能存在(前面的表达式)
+ 一个或多个之前的表达式
| 或操作
W(大写)非单词字符
w(小写)单词字符

String类自带了一个非常有用的正则表达式工具——split():将字符串从正则表达式匹配的地方切开。

Pattern
Matcher

13.6.2创建正则表达式
Pattern p = Pattern.compile("a*b");//指定为字符串的正则表达式(a*b)被编译为Pattern实例
Matcher m = p.matcher("aaaab");//将上步得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任何字符串序列匹配。
boolean b = m.matches();
仅使用一次正则表达式时:
boolean b = Pattern.matched("a*b","aaaab");
13.6.4Patter与Matcher
Matcher.find()方法可用来在CharSequence中查找多个匹配。
Matcher.find(i):参数i表示字符串中字符的位置,并以其作为搜索的起点。

组(group)
组是用括号划分的正则表达式,可以根据组的编号引用某个组。

start()与end()
start()返回先前匹配的起始位置的索引;
end()返回所匹配的最后字符的索引加1的值。

lookingAt():尝试将从区域开头开始的输入序列与该模式匹配。
与matched方法类似,此方法始终从区域的开头开始;与matches不同的是,它不需要匹配整个区域。
matched():尝试将整个区域与模式匹配。

Pattern标记
Pattern类的compile()方法的另外一个版本接收一个标记参数,以调整匹配的行为;

13.6.5split()
split()围绕此模式的匹配拆分给定输入序列。返回字符串数组如:Pattern.compile("!!").split(input)

13.6.6替换操作
1、replace two or more spaces with a single space
s=s.replaceAll(" {2,}"," ");//

13.6.7reset()
不带参数的reset()方法,可将Matcher对象重新设置到当前字符序列的起始位置。
reset(CharSequence input)方法,重置此具有新输入序列的匹配器。

13.6.8正则表达式与java I/O
StringReader将String转化为可读的流对象,使用流对象创建StringBUffer,可以使用它的readLine方法。

Scanner类,可大大减轻扫描输入的工作负担。
Scanner的构造器可以接受任何类型的输入对象,包括file对象、InputStream、String、Readable对象(BufferedReader)。

Scanner定界符:
使用useDelimiter()来设置定界符

使用正则表达式扫描:
当next()方法配合制定的正则表达式使用时,将找到下一个匹配该模式的 输入部分,调用match(0方法就可以获得匹配的结果。配合正则表达式使用扫描时,需要注意:它仅仅针对下一个输入分词进行匹配,如果正则表达式中国含有定界符,那永远都不可能匹配成功。


TAG:

 

评分:0

我来说两句

日历

« 2024-04-15  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 18256
  • 日志数: 25
  • 建立时间: 2014-11-10
  • 更新时间: 2015-03-12

RSS订阅

Open Toolbar