第十三章 字符串

来源:互联网 发布:娇韵诗淘宝旗舰店 编辑:程序博客网 时间:2024/06/11 16:13


可以证明,字符串操作是计算机程序设计中最常见的行为。
1.不可变String
String对象的不可变的。String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含
修改后的字符串内容。最初的String对象则丝毫未动。
2.重载“+”与StringBuilder
String对象是不可变的,你可以给一个String对象家任意多的别名。因为String对象具有只读性,所以指向它的任何引用都不可能
改变他的值。
注:在字符串进行“+”连接时,编译器会自动引入了Java.lang.StringBuilder类,因为它更高效。显示使用StringBuilder使代码
更简短,更简单,还允许你预先为其指定大小,预先指定大小可以避免多次重新分配缓冲。对于较简单是字符串可以编译器,但是对于
复杂的字符串,最好自己创建一个StringBuilder对象。
StringBuilder提供了丰富而全面的方法,包括insert()、replease()、substring()甚至reverse()但是最常用的append()
和toString()。还有delete()
3.无意识的递归
在toString()方法中使用this会产生递归调用。
例如:public String toString(){
    return “33214”+this;
}
编译器看到一个String对象后面跟着一个“+”,而后面的对象又不是String,于是编译器试着将this转换成一个String。它怎么转换
呢,正是调用this的toString()方法,于是就发生了递归调用。
4.String上的操作
。。。。。
5.格式化输出
5.1printf()
printf()并不使用重载的“+”操作符来连接引号内的字符串或字符串变量,而是使用特殊的占位符来表示数据将来的位置。而且
它还将插入格式化字符串的参数,以逗号分隔,排成一行。
5.2System.out.format()
format()与printf()是等价的
5.3Formatter类
在Java中,所有新的格式化功能都由java.util.Formatter类处理。可以将Formatter看做一个翻译器,它将你的格式化字符串与
数据翻译成需要的结果。当你创建一个Formatter对象的时候,需要向其构造器传递一些信息,告诉它最终的结果将向哪里输出。
5.4格式化说明符
在插入数据时,如果想要控制空格与对齐,你需要更精细复杂的格式修饰符
%[argument_index$][flags][width][.pricision]conversion
可选的 argument_index 是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。
可选 flags 是修改输出格式的字符集。有效标志集取决于转换类型。
可选 width 是一个非负十进制整数,表明要向输出中写入的最少字符数。
可选 precision 是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。
所需 conversion 是一个表明应该如何格式化参数的字符。给定参数的有效转换集取决于参数的数据类型。
5.5Formatter转换
5.6String。format()
6.正则表达式
6.1基础
正则表达式就是以某种方式来描述字符串
应用正则表达式的最简单的途径,就是利用String类内建的功能。“123”.matches("正则表达式")
String类还自带了一个非常有用的正则表达式工具----split()方法,其功能是将字符串从正则表达式匹配的地方分开
6.2创建正则表达式
6.3量词
量词描述了一个模式吸收输入文本的方式:贪婪型、勉强型、占有型
6.4Pattern和Matcher
使用正则表达式对象,只需导入java.util.regex包,然后用Pattern.compile()方法来编译你的正则表达式即可。它会根据
你的String类型的正则表达式生成一个Pattern对象。接下来,把你想要检索的字符串传入Pattern对象的matcher()方法。
matcher()方法会生成一个Matcher对象。
6.5split()
split()方法将输入字符串对象数组,断开边界由正则表达式确定
6.6替换操作
正则表达式特别便于替换文本,它提供了许多方法:replaceFirst(String replacement)、replaceAll(String replacement)
、appendReplacement(StringBuilder sbuf,String replacement)、执行渐进式替换
、appendTail(StringBuilder sbuf)在执行一次或多次appendReplacement()之后,调用此方法可以将输入字符串余下的
部分复制到sbuf中。
6.7reset()
通过reset()方法,可以将现有的matcher对象应用于一个新的字符序列。
6.8正则表达式与Java I/O
正则表达式可以在一个文件中进行搜索匹配操作。
7.扫描输入

8.StringTokenizer
在Java引入正则表达式和Scanner之前,分隔字符串的唯一方法是使用StringTokenizer来分词


0 0
原创粉丝点击