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

posted on 2017-04-17 20:56  hazelnut  阅读(114)  评论(0)    收藏  举报

导航