- 字符串操作时计算机程序设计中最常见的行为
- String对象是不可变的。String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容,而最初的String对象则丝毫未动
- 每把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过
- 在多个String相加时,编译器会创建一个StringBuilder对象,用以构造最终的String,并为每个字符串调用一次StringBuilder的append()方法,最后调用toString()生成结果
- 如果是多个字符串直接相加,而不含String对象,编译器会将其优化,直接生成一个结果字符串
- 当对象遇到字符串的加号时,会调用对象的toString()方法,然后与其他字符串相加
- 基本方法中,会改变字符串的方法都将返回一个新的String对象
- format方法可用于PrintStream和PrintWriter对象,其中也包括System.out对象,format()方法模仿自C的printf(),在System.out中也有printf方法,与format()方法等价
- java中所有新的格式化功能都由java.util.Formatter类处理
- String.format()是一个和Formatter.format()方法一样的参数,但返回一个String对象,其实在String.format()内部,也是创建一个Formatter对象,然后将传入的参数转给该Formatter
- 检查字符串是否匹配某个正则表达式:
- str.match("-?\\d+");
- String类还自带split方法,“将字符串从正则表达式匹配的地方切开“
- str.split("regex");
- 创建完整的正则表达式,查看java.util.regex中的Pattern类
- 量词描述了一个模式吸收输入文本的方式:
- 贪婪型:量词总是贪婪的,除非有其他的选项被设置。贪婪表达式会为所有可能的模式发现尽可能多的匹配
- 勉强型:用问号来指定,这个量词匹配满足模式所需的最少字符数
- 占有型:这种类型的量词只有在Java语言中才可用,并且也更高级。当正则表达式被应用于字符串时,它会产生相当多的状态,以便在匹配失败时可以回溯。而占有型量词并不保存这些中间状态,因此他们可以防止回溯。他们常常用于防止正则表达式失控,因此可以使正则表达式执行起来更有效
- 若需要使用功能强大的正则表达式,导入java.util.regex包,然后用static 的Pattern.complie()方法来编译正则表达式,根据String类型的正则表达式生成一个Pattern对象,接下来把想要检索的字符串传入Pattern对象的matcher()方法。matcher()方法会生成一个Matcher对象
- Matcher中有很多方法
- boolean matches() 判断整个字符串是否匹配正则表达式
- boolean lookingAt() 判断正则表达式的起始部分是否符合正则表达式
- boolean find()可以用来在CharSequence中查找多个匹配
public static void main (String[] args){ Matcher m = Pattern.compile("\\w+").matcher("Evening is full of the linnet's wings"); while(m.find()){ System.out.println(m.group() + " "); } }
- boolean find(int start) 能够接受一个整数作为参数,该证书表示字符串中字符的位置,并以其作为搜索的起点
- 组是用括号划分的正则表达式,可以根据组的编号来引用某个组
- public int groupCount():返回该匹配器的模式中的分组数目,第0组不包括在内
- public String group():返回前一次匹配操作的第0组
- public String group(int i):返回在第一次匹配操作期间指定的组号,如果匹配成功,但是指定的组没有匹配输入字符串的任何部分,则将会返回null。
- public int start(int group):返回在前一次匹配操作中寻找到的组的起始索引
- public int end(int group):返回在前一次匹配操作中寻找到的组的最后一个字符索引加一的值
- find()可以在任意位置定位正则表达式,而lookingAt()和matches()只有在正则表达式与输入的最考试处开始匹配时才会成功
- split()方法将输入字符串断开成字符串对象数组,断开边界由正则表达式确定
- String[] split (CharSequence input)
- String[] split (CharSequence input, int limit)
- 一些文本替换方法:
- replaceFirst(String replacement):以参数字符串替换掉第一个匹配成功的部分
- replaceAll (String replacement):以参数字符串替换所有匹配成功的部分
- appendReplacement (StringBuffer sbuf, String replacement):实行渐进式替换
- appendTail (StringBuffer sbuf):执行了一次货多次appendReplacement()方法之后,调用此方法可以将输入字符串余下部分复制到sbuf中
- reset()方法可以将现有的Matcher对象应用于一个新的字符序列
- Scanner的构造器可以接受任何类型的输入对象,包括File对象,可以使用scanner的各种类型的next方法