TIJ C13 字符串
TIJ Chapter13
Strings
String的操作
- String是不可变的,每一个看似修改了String的方法其实都是创建并返回了一个新的String对象。
- 在进行重复性的大量的字符串修改时,我们应该使用StringBuilder类。
- .append(String) 向StringBuilder中添加String
- .toString()将StringBuilder中的内容变成String
- 另外还有insert() substring() reverse() delete()等方法 查看JDK文档
- String本身还有很多其他操作,详情见TIJ P288和JDK文档
格式化输出
printf() 与 System.out.format()
和C语言中的printf一样。System.out.format()与其等效。
Formatter类
- 可以创建java.util.Formatter类,创建的时候向构造函数传递输出流的信息。
- 之后调用类里的format()对象进行输出。和printf()用法一样。
- String.format()是一个静态方法,具体效果与Formatter.format()是一样的。
正则表达式
基础语法
- 在java中,
\\的意思是“插入一个正则表达式中的斜线”,所以对于普通正则中的\d等其实应该在java中输入\\d。 - 反斜杠加上:
- d表示任意数字
- D表示任意非数字
- w表示任意字母
- W表示任意非字母
- s表示任意空格
- S表示任意非空格
- 其余的语法在P298 或查找JDK
在String类中直接应用正则
对String对象调用:
- boolean .matches(String regex) 可以返回是否匹配的boolean值
String[] .split(String regex)将在各个regex匹配处切割字符串,返回各切割部分组成的字符串数组, 可以重载再加上一个int值表示最多切割次数- String s.replaceFirst(String replacement) String中的方法,可以用来替换第一处正则匹配内容。
- String s.replaceAll(String replacement) String中的方法,可以用来替换所有正则匹配内容
CharSequence接口
【不是很有用】
CharSequence接口是从CharBuffer,String,StringBuffer,StringBuilder中抽象出的字符序列的一般化定义接口。多数正则表达式都接受CharSequence类型的参数。
Pattern类
录入正则表达式
static Pattern Pattern.compile(String Regex)是一个静态方法,会根据输入的regex字符串生成一个相应的Pattern对象。
录入待检索字符串
Matcher p.matcher(String input)是一个动态方法,会根据输入的字符串生成一个相应的Matcher对象,该对象可以用来被录入的Pattern正则对象进行匹配。
Idiom
''Pattern p = Pattern.compile(myRegex);
''Matcher m = p.matcher(myInput);
''\m.method() 或 p.method() 等方法,以用来处理输入。
检测是否完全匹配
static boolean Matcher.matches(String regex, CharSequence input);
- 用于检查regex是否能完全地匹配input
分割字符串
String[] .split(String regex)与之前的String的.split()方法是一样的。
Pattern标记
可以对compile方法重载,加入第二个参数,称为标记参数,从而使其在匹配时有不同的行为。
- 分别有多行匹配,忽略大小写匹配,忽略注释匹配等,且分别有对应的正则标记,可以加上括号直接应用到正则表达式中。
Matcher类
用regex进行一次匹配
boolean .find(int startIndex);
- 可以用于对当前的input字符串通过regex进行一次匹配。如果没有匹配结果则返回false。startIndex可以用来指定从开头的第几个字符索引处开始匹配。
- 如果重复地使用同一个find()方法,则会向后迭代匹配下一个regex匹配处,直到最后没得可配。
判断开头部分是否匹配
boolean .lookingAt(int start)
- 检查开头部分是否匹配,加入start参数则是从第start的索引处开始检查。
检测是否完全匹配
boolean .matches();
- 用于检查regex是否能完全地匹配input
组相关的方法
- int .groupCount()返回匹配器模式中的分组数目。
- String .group(int i)返回第i组,如果留空则为第0组。如果没有进行匹配或者没有匹配到则返回null。
- int .start(int group)返回第i组的起始索引。留空则是第0组。如果匹配操作失败了调用会返回IllegalStateException.
- int .end(int group)返回第i组的末尾索引+1。留空则是第0组。如果匹配操作失败了调用会返回IllegalStateException.
替换方法
- .appendReplacement(StringBuffer sbuf, String replacement) 对当前匹配到的部分进行一次替换,从上次匹配完成的位置直到替换完成的地方存到sbuf中去。
- .appendTail(StringBuffer sbuf) 将输入字符串余下的部分复制到sbuf中去,和appendReplacement配合使用。
重置Matcher对象
- .reset(String newInput) 可以将现有的Matcher对象应用于一个新的输入。
- .reset() 会将Matcher对象重新设置到当前字符序列的起始位置。
Scanner类
【非常好用】
用于接受任何类型的输入对象,并对其进行扫描。
构造器
- Scanner(Readable inputStream)
- Scanner会自动把IOException吞掉。
定界符
- .useDelimieter(String regex)用来定义当前scanner每一次录入的终止边界。
- Pattern .delimiter()返回当前用于做定界符的Pattern对象。
next()方法
将regex String放入.next()中,scanner.match()就会返回所匹配的相应的字符串。
使用详情见P311
浙公网安备 33010602011771号