第十章主讲字符串,什么是字符串?字符串是java程序中经常处理的对象,在java中,字符串作为String类的实例来处理。
10.1String类
单个字符可以用char类型保存,多个字符组成的文本就需要保存在String对象中。String通常为字符串,一个String对象最多可以保存(2^32-1)个字节(占用空间大小)的文本内容。
10.1.1声明字符串
在java语言中,字符串必须包含在一对双引号("")之内。
例子:
"23.23","ASDFG","你好".这些都是字符串常量,字符串常量可以是系统能够显示的任何文字信息,甚至单个字符串。
这些语法格式可以声明字符串变量:
String str;
1.String:指定该变量为字符串类型。
2.str:任意有效的标识符,表示字符串变量的名称。
比如声明字符串变量s,代码:String s;
10.1.2创建字符串
创建字符串要用类的构造方法。以下是String类的常用构造方法:
1.String(char a[])
2.String(char a[],int offset,int length)
3.String(char[] value)
除了上面这三种String类的构造方法来创建字符串外,还可以用字符串常量的引用赋值给一个字符串变量来创建字符串,代码:
String str1,str2;
str1 = "We are students"
str2 = "We are students"
此时,他们具有相同的实体。
10.2连接字符串
笔记。
使用“+”运算可以实现连接多个字符串的功能,“+”运算符可以连接多个String对象并产生一个新的String对象。
例子:
10.2.2连接其他数据类型
字符串可以连接其他数据类型,与其他数据类型连接的时候会把其他数据类型的数据转换成字符串。例子
这个例子是把字符串常量与整数常量booktime和浮点型变量practice相连后输出结果,把不是字符串的booktime和practice(调用toString())转换成字符串形式,参与连接。
如果把当中的practice修改为practice+booktimeo如下图:
此代码表现了运算符是有优先级的,圆括号的优先级最高,先被执行,然后再于字符串相连。
10.3获取字符串信息
10.3.1获取字符串的长度
使用String类的length()方法可获取声明的字符串对象,语法如下:
str.length();其中,str为字符串对象获取字符串长度,代码如下:
String str = "We are students";
int size = str.length();例子如上图。
10.3.2字符串查找
String类提供两种字符串查找方法,分别是indexOf()与lastInsexOf()方法,前者是查找该字符或者字符串第一次出现的位置,后者是查找该字符或者字符串最后一次出现的位置。
前者语法:
str.indexOf(String s)
str:任意字符串对象
substr:要搜索的字符串
后者语法:
str.lastIndexOf(substr)
str:任意字符串对象
substr:要搜索的字符串
例子如下:
例子10.3,用两种方法判断字符串长度例子:
10.3.3获取指定索引位置的字符
使用charAt()方法可将指定索引处的字符返回。语法如下:
str.charAt(int index)
str:任意字符串
index:整型值,用于指定要返回的字符的下标。
例子10.4查看指引位置上的字符
10.4字符串操作
本节主要讲解几种常见的字符串操作
10.4.1获取子字符串
String类的substring()方法可对字符串进行截取,substring()有两种不同的重载形式。字符串下标是从0开始的。
1.substring(int beginIndex)
该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串,语法:str.substring(int beginInlndex)
beginIndex是从指定某一索引处开始截取字符串。
String str = "Hello World";//定义字符串str
String substr = str.substring(3);//获取字符串,此时substr值为lo World
2.substring(int beginIndex,int endlndex)
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的子串,语法:substring(int beginlndex,int endlndex)
beginIndex:开始截取子字符串的索引位置。
endIndex:子字符串在整个字符串中的结束位置。
例子:
10.4.2去除空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格。语法:str.trim()
例子:
这个例子中定义字符串用str.后将str原来的长度输出。
10.4.3字符串替换
replace()方法可实现将指定的字符或字符串替换成新的字符或字符串,语法:str.replace(CharSequence target,CharSequence replacement)
target:要替换的字符或字符串
replacement:用于替换原来字符串的内容。
10.4.4判断字符串的开始与结尾
startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型。
1.starsWith()方法
语法:str.startsWith(String prefix)
prefix是作为前缀的字符串
2.endsWith()方法
语法:str.endsWith(String suffix)
suffix是指作为后缀的字符串
例子:判断字符串是否以指定内容开头或者结尾
10.4.5判断字符串是否相等
对字符串进行比较不能简单的用“==”,应该这样用,代码:String tom = new String("i am a student"); 或者 String jerry = new String("i am a student"); boolean b = (tom == jerry);
1.equals()方法
语法:str.equals(String otherstr)
str,otherstr是要比较的两个字符串对象。
2.equalslgnoreCase()方法
语法:str.equalslgnoreCase(String otherstr)
str,otherstr是要比较的两个字符串对象。
equals()方法和equalsIgnoreCase()方法区别的例子:
10.4.6按字典顺序比较两个字符串
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将String对象表示的字符序列与参数字符串所表示的字符序列进行比较。语法:str.compareTo(String otherstr)
str和otherstr是要比较的两个字符串对象。
10.4.7字母大小写转换
String类的toLowerCase()方法可将字符串中的所有大写字母改写为小写字母,而toUpperCase()方法可将字符串中的所有小写字母 改写为大写字母。
1.toLowerCase()方法
方法将字符串中的所有大写字母转换为小写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中每个大写字母都转换成小写,字符串长度不变。语法如下:
str.toLowerCase()
其中,str是要进行转换的字符串。
2.toUpperCase()方法
该方法将字符串中所有的小写字母转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回:否则返回一个新字符串,将原字符串中每个小写字母都转换成大写,字符串长度不变。语法如下:
str.toUpperCase()
其中,str 是要进行转换的字符串。
10.4.8字符串分割
使用split()方法可以使字符串按指定定的分割字符或字符串进行分割,并将分割后的结果存放在字符串类数组中。split()方法提供了以下两种字符串分割形式。
1. split(String sign)
该方法可根据给定的分割符对字符 串进行拆分。语法如下:
str.split(String sign)
其中,sign为分割字符串的分割符,也可以使用正则表达式。
2. split(String sign,int lin mit)
该方法可根据给定的分害利符对字符串进行拆分,并限定拆分的次数。语法如下:
str.split(String sign,int limit)
sign:分割字符串的分割符,也可以使用正则表达式。
limit:限制的分割次数。
10.5格式化字符串
String 类的静态format法用于创建格式化的字符串。format0方法有两种重载形式。
1. format(String format,Object...args)
该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地的的语言环境。语法如下:
str.format(StringformatObject...args)
format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为 0。
2.format(Local l,String format,Object...args)
该方法使用指定的语言环境、格式字符串和参数返回一个格式化字符串,格式化后的新字符率用其指定的语言环境。语法如下:
str.format(Local lStringformatObjectargs
1:格式化过程中要应用的语言环境。如果1为null,则不进行本地化。
format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略迎额外的参数。此参数的数目是可变的,可以为0。
10.5.1日期和时间字符串格式化
在应用程序设计中,经常需要显示日期和时间。如果想输出满意的日期和时间格式写大量的代码、经过各种算法才能实现。format()方法通过给定的特殊转换符作为参数来实时间的格式化。
1.日期格式化
先来看一个例子。返回一个月中的天数,代码如下:、
Date date=new Date(); //创建Date 对象 date
String s =String.format("%te", date); //通过 format()方法对date进行格
2.时间格式化
使用fomat()方法不仅可以完成日期的格式化,也可以实现时间的格式化。时间的格式化转换符要比日期的格式化转换符更多、更精确
3.格式化常见的日期时间组合
格式化日期与时间组合的转换符定义了各种日期时间组合的格式
10.5.2常规类型格式化
常规类型格式化可应用于任何参数类型,
10.6使用正则表达式
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一下具体特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。
正式表达式中,可以使用方括号括起若干个字符来表示一个元字符,该元字符可以代表方括号中的任何一个字符。
reg=“【abc】4”代表:a4,b4,c4。
【^456】:代表4、5、6之外的任何字符。
【a-r】:代表a-r中的任何一个字母。
【a-zA-Z】:可表示任意一个英文字母。
【a-e【g-z】】:代表a~r或g~z中的任何一个字母(并运算)。
【a-o&&【def】】:代表字母d、e、f(交运算)。
【a-d&&【^bc】】:代表字母a、d(差运算)。
在正则表达式中允许使用限定修饰符来限定元字符出现的次数,例如,“A*”代表A可在字符串中出现0次或多次。
10.7字符串生成器
创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果 重复地对字符串进行修改,将极大地增肌系统的开销。而JDK新增了可变的字符序列StringBuilder类,大大提供了频繁增加的字符串的效率。
通过这一实例可以看出,两种操作执行的时间差距很大。如果在程序中频繁地附加字符串,建议使用StringBuilder类 新创建的 StringBuilder对象初始容量是16个字符,可以自行指定初始长度。如果附加的字符超过可容纳的长度,则 StringBuilder将自长以容纳被字符。若要使用StringBuilder类最后输字结果,可使用toString方法。利用StringBuilder类中的方法可态地执行添加、删除和插入等字符串的编辑操作。该类的常用方法如下。
1. append()方法
该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据,如int、boolean、char、String、double或者另一个字符串生成器等。语法如下:
append(content)
其中,content器内,类数据或者其他对象
2. insert(int offset,arg)方法
该方法用于向字符串生成器中的指定位置插入数据内容。通过该方法的不同重载形式,可实现向字符串生成器中插入int、float、char 和boolean 等基本数据类型的数据或其他对象。语法如下:
insert(int offset arg)
offset:字符串生成器的位置。该参数必须大于等于 0,且小于等于此序列的长度。
arg:将插入至字符串生成器的位置。该参数可以是任何数据类型的数据或其他对象。
向字符串生成器中指定的位置添加字符,代码如下:
StringBuilder bf =new StringBuilder("hello"); //创建字符生成器
bf.insert(5, "world"); //添加至字符生成器的位置及内容
System.out.printn(bf.toString()); //此时输出信息为helloworld
3. delete(int startint end)方法
移除此序列的子字符串中的字符。该子字符串从指定的start处开始,一直到索引end-1处的字符。如果不存在这种字符,则一直到序列尾部。如果start等于end,则不发生任何更改。语法如下:
delete(int start, int end)
start:将要删除的字符串的起点位置。
end:将要删除的字符串的终点位置。
删除指定位置的子字符串,代码如下:
StringBuilder bf=new StringBuilder(“StringBuilder”);
bf.delete(5,10);
System.out.println(bf.toString());