一.String类
1.声明字符串
在Java中,字符串必须包含在一对双引号(" ")之间,称之为字符串常量。这些字符串常量可以是系统能够显示的任何文字信息,甚至可以是单个字符。
声明字符串变量的语法格式:
例:
String str;
·String:指定该变量为字符串类型。
·str:任意有效的标识符,表示是字符串变量的名称。
2.创建字符串
在Java语言中,将字符串作为对象来处理,因此可以像创建其他类对象一样来创建字符串对象。创建对象要使用类的构造方法。
String类的常用构造方法:
(1)String(char a[])
(2)String(char a[],int offset,int length)
(3)String(char[] value)
除此之外,还可以通过将字符串常量的引用赋值给一个字符串变量来创建字符串。
例:
String str1,str2;
str1="We are students";
str2="We are students";
此时,str1与str2引用相同的字符串变量,因此具有相同的实体。
总结:
结果:
二.连接字符串
对于已声明的字符串,可以对其进行相应的操作。可以对多个字符串进行连接,也可使字符串与其他数据类型进行连接。
1.连接多个字符串
使用“+”运算符可实现连接多个字符串的功能。“+”运算符可以连接多个String对象并产生一个新的String对象。
【例10.1】先连接一副对联的上、下联,再分行输出在控制台上
代码:
结果:
2.连接其他数据类型
字符串也可同其他基本数据类型进行连接。如果将字符串同其他数据类型进行连接,会将其他数据类型的数据直接转换成字符串。
三.获取字符串信息
1.获取字符串长度
使用String类的length()方法可获取声明的字符串对象的长度。
语法:
str.length();
其中,str为字符串对象。
获取字符串长度,代码:
String str="We are students";
int size=str.length();
2.字符串查找
String类提供了两种查找字符串的方法,即indexOf()与lastIndexOf()方法。
indexOf()方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOf()方法返回的是搜索的字符或字符串最后一次出现的位置。
(1)indexOf(String s)
该方法用于返回参数字符串s在指定字符串中首次出现的索引位置。当调用String类的indexOf()方法时,会从当前字符串的开始位置搜索s的位置。如果没有检索到字符串s,该方法的返回值是-1。语法:
str.indexOf(substr)
str:任意字符串对象。
substr:要搜索的字符串。
查找字符a在字符串str中的索引位置,代码:
String str="We are students";
int size=str.indexOf("a");//变量size的值是3
(2)lastIndexOf(String str)
该方法用于返回指定字符串最后一次出现的索引位置。当调用String类的lastIndexOf()方法时,会从当前字符串的开始位置检索参数字符串str,并将最后一次出现str的索引位置返回。如果没有检索到字符串str,该方法的返回值是-1。语法:
str.lastIndexOf(substr)
str:任意字符串对象。
substr:要搜索的字符串。
3.获取指定索引位置的字符
使用charAt()方法可将指定索引处的字符返回。语法:
str.charAt(int index)
str:任意字符串。
index:整型值,用于指定要返回字符的下标。
四. 字符串操作
1.获取子字符串
通过String类的substring()方法可对字符串进行截取。substring()方法被两种不同的重载形式,来满足不同的需要。这些形式的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从0开始的。
(1)substring(int beginIndex)
该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串。语法:
str.substring(int beginIndex)
beginIndex:指定从某一索引处开始截取字符串。
截取字符串,代码:
String str="Hello World";//定义字符串str
String substr=str.substring(3);//获取字符串,此时substr值为lo World
(2)substring(int beginIndex,int endIndex)
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的字串。语法:
substring(int beginIndex,int endIndex)
beginIndex:开始截取子字符串的索引位置。
endIndex:子字符串在整个字符串中的结束位置。
【例10.5】《将进酒》的作者是哪位诗人?
代码:
结果:
2.去除空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格。语法:
str.trim()
str:任意字符串对象。
3.字符串替换
replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。语法:
str.replace(CharSequence target,CharSequence replacement)
target:要替换的字符或字符串。
replace:用于替换原来字符串的内容。
replace()方法返回的结果是一个新的字符串。如果字符或字符串oldChar没有出现在该对象表达式中的字符串序列中,则将原字符串返回。
4.判断字符串的开始与结尾
startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型。
(1)startsWith()方法
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串。语法:
str.startsWith(String prefix)
prefix:作为前缀的字符串。
(2)endsWith()方法
该方法用于判断当前字符串是否为以给定的子字符串结束。语法:
str.endsWith(String suffix)
suffix:作为后缀的字符串。
总结:
结果:
5.判断字符串是否相等
对字符串对象进行比较不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的住址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回false。使用比较运算符比较两个字符串,代码如下:
String tom=new String("I am a student");
String jerry=new String("I am a student");
boolean b=(tom==jerry);
此时,布尔型变量b的值为false,因为字符是对象,tom、jerry是引用。
因此,要比较两个字符串内容是否相等,应使用equals()方法和equalsIgnoreCare()方法。
(1)equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true。否则,返回false。语法:
str.equals(String otherstr)
str、otherstr是要比较的两个字符串对象。
(2)equalsIgnoreCase()方法
使用equals()方法对字符串进行比较时是区分大小写的,而使用equalsIgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为boolean类型。语法:
str.equalsIgnoreCase(String otherstr)
str、otherstr是要比较的两个字符串对象。
6.按字典顺序比较两个字符串
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将String对象表示的字符序列与参数字符串所表示的字符序列进行比较。语法:
str.compareTo(String otherstr)
str、otherstr是要比较的两个字符串对象。
7.字母大小写转换
String类的toLowerCase()方法可将字符串中的所有大小写字母改为小写字母,而toUpperCase()方法可将字符串中的所有小写字母改写为大写字母。
(1)toLowerCase()方法
该方法将字符串中的所有大写字母转化为小写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中每个大写字母都转换成小写,字符串长度不变。语法:
str.toLowerCase()
str是要进行转换的字符串。
(2)toUpperCase()方法
该方法将字符串中所有的小写字母转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则返回一个新的字符串,将原字符串中每个小写真面目都转换成大写,字符串长度不变。语法:
str.toUpperCase()
str是要进行转换的字符串。
8.字符串分割
使用split()方法可以使字符串按指定的分割字符或字符串进行分割,并将分割后的结果存放在字符串数组中。
(1)split(String sign)
该方法可根据给定的分割符对字符串进行拆分。语法:
str.split(String sign)
sign为分割字符串的分割符,也可以使用正则表达式。
(2)split(String sign,int limit)
该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数。语法:
str.split(String sign,int limit)
sign为分割字符串的分割符,也可以使用正则表达式。
limit为限制的分割次数。
总结:
结果:
五.格式化字符串
String类的静态format()方法用于创建格式化的字符串。format()方法有两种重载形式。
(1)format(String format,Object...args)
该方法使用指定的格式字符串和参数返回一个格式化化字符串,格式化后的新字符串使用本地默认的语言环境。语法:
str.format(String format,Object...args)
format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。
(2)format(Local 1,String format,Object..args)
该方法使用指定的原语言环境、格式字符串和参数返回一个格式化字符串,格式化字符串,格式化后的新字符串使用其指定的语言环境。语法:
str.format(Local 1,String format,Object...args)
1:格式化过程中要应用的语言环境,如果1为null,则不进行本地化。
format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。
1.日期和时间字符串格式化
(1)日期格式化
例:返回一个月中的天数,代码:
Date date=new Date();//创建Date对象date
String s=String.format("%te",date);//通过format()方法对date进行格式化
上述代码中变量s的值是当前日期中的天数;%te是转换符。
(2)时间格式化
(3)格式化常见的日期时间组合
2.常规类型格式化
常规类型格式化可用于任何参数类型。
【例10.16】使用转换符获取表达式的结果
代码:
结果:
总结:
结果:
六.使用正则表达式
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。
在正则表达式中,可以使用方括号括起若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。
方括号元字符还可以为其他格式:
(1)[^456]:代表4、5、6之外的任何字符。
(2)[a-r]:代表a~r中的任何一个字母。
(3)[a-zA-Z]:可表示任何一个英文字母。
(4)[a-e[g-z]]:代表a~e或g~z中的任何一个字母(并运算)。
(5)[a-o&&[def]]:代表字母d、e、f(交运算)。
(6)[a-d&&[^bc]]:代表字母a、d(差运算)。
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。
【例10.17】验证E-mail地址是否“合法”
代码:
结果:
七.字符串生成器
创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大地增加系统开销。而JDK新增了可变的字符序列StringBuilder类,大大提高了频繁增加字符串的效率。
利用StringBuilder类中的方法可动态的执行添加、删除和插入等字符串的编辑操作。该类的常用方法如下:
1.append()方法
该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据。语法:
append(content)
content表示要追加到字符串生成器中的内容,可以是任何类型的数据或者其他对象。
2.insert(int offset,arg)方法
该方法用于向字符串生成器中的指定位置插入数据内容。语法:
insert(int offset arg)
offset为字符串生成器的位置。该参数必须大于等于0,且小于等于此序列的长度。
arg为将插入至字符串生成器的位置。该参数可以是任何数据类型的数据或其他对象。
向字符串生成器中指定的位置添加字符,代码:
StringBulider bf=new StringBuilder("hello");//创建字符生成器
bf.insert(5,"world");//添加至字符生成器的位置及内容
System.out.println(bf.toString());//此时输出信息为helloword
3.delete(int start,int 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());//此时输出的信息为Strinder