10.1 String类
String类是Java中非常重要的一个类,用于表示字符串。字符串是一个非常常见的数据类型,可以用来表示文本、数字等等。String类的实例是不可变的,也就是说,一旦创建了一个String对象,就不能再修改它的值。这使得String类非常适合用于表示常量和不可变的文本数据。
10.1.1 声明字符串
在Java语言里,字符串必须包含在一对双引号(””)之内
"22.22" "Adadkn" "你好"
可以通过以下语法格式来声明字符串变量
String str;
String:指明该变量为字符串类型
str:任意有效的标识符,表示字符串变量的名称
10.1.2 创建字符串
在Java语言中,将字符串作为对象来处理,因此可以像创建其他类一样来创建字符串变量,创建对象要使用类的构造方法,String类的常用构造方法如下:
除通过以上几种使用String类的构造方法来创建字符串变量外,还可以通过将字符串常量的引用赋值给一个字符串来创建字符串,代码如下:
10.2 连接字符串
对于已声明的字符串,可以对其进行相应的操作,连接字符串就是字符操作中较简单的一种,可以对多个字符串进行连接,可以使字符串与其他数据类型进行连接。
10.2.1 连接多个字符串
使用“+”运算符可实现连接多个字符串的功能。“+”运算符可以连接多个String对象并产生一个新的String对象。
例题10.1:先连接一副对联的上,下联。在分行输出在控制台上面
10.2.2 连接其他数据类型
字符串也可同其他数据类型进行连接。如果将字符串同其他数据类型进行连接,会将其他数据类型直接转换成字符串。
例题10.2:统计每天的阅读和上机时间
10.3 获取字符串信息
10.3.1 获取字符串长度
获取字符串长度可以使用String类的length()方法,该方法返回字符串中字符的个数,如下所示:
String str = "Hello World!";int len = str.length(); // len的值为12
在上述代码中,str.length()返回字符串str中字符的个数,即12个字符。
10.3.2 字符串查找
在Java中,可以使用以下方法来查找字符串:
1.indexOf():查找字符串中某个子串的位置,如果找到了,则返回第一个匹配的子串的起始位置,否则返回-1。
例如:
String str = "hello world";int index = str.indexOf("world");System.out.println(index); // 输出6
2.lastIndexOf():和indexOf()方法类似,只不过是从字符串的末尾开始查找。
例如:
String str = "hello world";int index = str.lastIndexOf("o");System.out.println(index); // 输出7
例题10.3:用两种方式判断字符串的长度
10.3.3 获取指定索引位置的字符
要获取指定索引位置的字符,可以使用String类的charAt()方法。该方法接受一个整数参数,表示要获取的字符所在的索引位置,返回对应位置上的字符。需要注意的是,字符串中的索引是从0开始的。语法如下:
str.charAt(int index)
str:任意字符串
index:整型值,用于指定要返回字符的下标
例题10.4:查看指定索引位置上的字符
10.4 字符串操作
String类中包含了很多方法,允许程序员对字符串进行操作来满足实际编程中的需要。本节将讲解几种常见的字符串操作。
10.4.1 获取子字符串
获取子字符串可以使用 substring() 方法,它可以对字符串进行截取,substring()方法被两种不同的重载形式,来满足不同的需要。其语法如下:
public String substring(int beginIndex)public String substring(int beginIndex, int endIndex)
其中,beginIndex 表示子字符串的起始索引位置(包含该位置),endIndex 表示子字符串的结束索引位置(不包含该位置)。如果省略 endIndex 参数,则子字符串的结束索引位置默认为字符串的末尾。
例如:
String str = "hello world";String subStr1 = str.substring(3); // "lo world"String subStr2 = str.substring(0, 5); // "hello"
使用substring(3)截取字符串的过程如图:
例题10.5:《将进酒》的作者是哪位诗人?
10.4.2 去除空格
trim()方法返回字符串副本,忽略前导空格和尾部空格。语法如下:
str.trim()
例题10.6: 去掉字符首,尾的空格
10.4.3 字符串替换
字符串替换可以使用String类的replace方法来实现。其基本语法如下:
String str = "hello world";String newStr = str.replace("world", "java");
上述代码中,首先定义了一个字符串str,然后调用其replace方法,将其中的字符'l'替换为'L',得到一个新字符串newStr,最后将新字符串输出。
需要注意的是,replace方法返回的是一个新的字符串,原字符串并没有改变。如果字符或字符串oldChar出现在该对象表达式中的字符串序列中,则将原字符串返回。
例题10.7:将单词中的字母a替换成字母A
10.4.4 判断字符串的开始与结尾
判断字符串的开始与结尾可以使用startsWith()和endsWith()方法,它们都是String类的实例方法。
1.startsWith(String prefix)方法用于判断字符串是否以指定的前缀开头,如果是则返回true,否则返回false。参数prefix是要检查的前缀字符串。语法如下:
str.startsWith(String prefix)
2.endsWith(String suffix)方法用于判断字符串是否以指定的后缀结尾,如果是则返回true,否则返回false。参数suffix是要检查的后缀字符串。语法如下:
str.endsWith(String suffix)
例题10.8:判断字符串是否以指定内容开始或结束
10.4.5 判断字符串是否相等
字符串的相等判断需要使用equals()或equalsIgnoreCase()方法,不能使用==或!=运算符,因为==或!=比较的是对象的引用是否相等,而不是字符串的内容是否相等。
1.equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true。否则,返回false。语法如下:
str.equals(String otherstr)
其中,str,otherstr是要比较的两个字符串对象。
2. equalsIgnoreCase()方法
使用equals()方法对字符串进行比较时是区分大小写的,而是用equalsIgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为Boolean类型。语法如下:
str.equalsIgnoreCase(String otherste)
其中,str,otherstr是要比较的两个字符串对象。
例题10.9:判断abc与ABC是否相等
10.4.6 按字典顺序比较两个字符串
可以使用 compareTo() 方法按字典顺序比较两个字符串,返回值如下:
如果字符串与参数相等,返回0。
如果字符串在字典顺序中排在参数之前,返回小于0的值。
如果字符串在字典顺序中排在参数之后,返回大于0的值。
语法如下:
str.compaerTo(String otherstr)
其中,str,otherstr是要比较的两个字符串对象。
例题10.10:判断字母b的位置
10.4.7 字母大小写转换
要将字符串中的字母大小写进行转换,可以使用toUpperCase()和toLowerCase()方法。
toLowerCase()方法将字符串中的所有大写字母转换成小写字母。
toUpperCase()方法将字符串中的所有小写字母转换成大写字母。
1.toLowerCase()方法
该方法将字符串中的所有大写字符转换成小写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中的每个大写字母都转换成小写,字符长度不变。语法如下:
str.toLowerCase()
2.toUpperCase()方法
该方法将字符串中的所有小写字符转换成大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中的每个小写字母都转换成大写,字符长度不变。语法如下:
str.toUpperCase()
例题10.11:字母大小写转换
10.4.8 字符串分割
字符串分割指将一个字符串按照指定的分隔符拆分成多个子字符串。Java中,字符串分割可以通过String类的split()方法来实现。
1.split(String sign)
该方法可根据给定的分隔符对字符串进行拆分。语法如下:
str.split(String sign)
其中,sign为分割字符串的分隔符,也可以使用正则表达式。
2.split(String sign,int limit)
该方法可根据给定的分隔符对字符串进行拆分,并限定拆分的次数。语法如下:
split(String sign,int limit)
sign:分割字符串的分隔符,也可以使用正则表达式。
limit:限制的分割次数
例题10.12:按要求分割“192.168.0.1”
10.5 格式化字符串
String.format()方法有两种重载形式:
1.format(String format, Object... args)
该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境。语法如下:
str.format(String format, Object... args)
format:格式化字符串
args:可变参数,用于替换占位符的参数。
2.format(Locale l, String format, Object... args)
该方法使用指定的语言环境,格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用其指定的语言环境。语法如下:
str.format(Locale l, String format, Object... args)
l:格式化过程中要应用的语言环境。如果l为null,则不进行本地化。
format:格式化字符串。
args:可变参数。
10.5.1 日期和时间字符串格式化
在应用程序设计中,经常需要显示日期和时间。如果想输出满意的日期和时间格式,一般需要写大量的代码,经过各种算法才能实现。format()方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。
1.日期格式化
先来看一个例子,返回一个月中的天数,代码如下:
Date date = new Date(); //创建Date对象dateString s = String.format("%te",date); //通过format()方法对date进行格式化
上述代码中变量s的值是当前日期中的天数,如今天是11号,则s的值为11;%te是转换符。常用的日期格式化转换符如图所示:
例题10.13:按照格式输出今天的年,月,日。其中,输出格式为4位年份,月份全称和2位日期。
2.时间格式化
时间格式化指将时间按照一定的格式展示出来,常见的格式包括年、月、日、时、分、秒等。使用format()方法就能完成。格式化时间的转换符如图:
例题10.14:按照格式输出当下的时,分,秒
3.格式化常见的日期时间组合
格式化日期与时间组合的转换符定义了各种日期时间组合的格式,其中最常用的如表所示:
例题10.15:按照格式输出当下的年,月,日
10.5.2 常规类型格式化
常规类型格式化可用于任何参数类型,可通过下面表中所示的转换符来实现。
例题10.16:使用转换符获取表达式的结果
10.6 使用正则表达式
正则表达式是一种用来匹配字符串的模式,是一种语法规则,可以用来检查一个字符串是否符合一定的规则,也可以从一个字符串中获取符合特定规则的子串。正则表达式就是含有一些特殊意义字符的字符串,特殊字符称为正则表达式中的元字符,例如“d”表示数字0~10中的任何一个,“d”就是元字符。正则表达式中的元字符及其意义如表所示:
注意:“.”也可以用转义字符“”来使用,如“.”
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如“A*”代表A可在字符串中出现0次或多次。限定修饰符的用法如表所示:
例题10.17:验证E-mail地址是否“合法”
10.7 字符串生成器
字符串生成器(StringBuilder)是Java中一个可变的字符串类,它和String类很相似,但是可以进行修改和添加操作。和String不同,StringBuffer是线程安全的,也就是说,可以在多线程环境下使用。StringBuilder是非线程安全的,也就是说,StringBuilder不能保证在多线程环境下使用时不会出现问题。
字符串生成器是在Java 1.5中引入的,StringBuilder是它的一个扩展类。StringBuilder的使用方法和String类基本一致,可以进行字符串拼接、替换等操作。与String类不同的是,StringBuilder的操作都是在原字符串上进行的,不会创建新的字符串对象,因此效率更高。
例题10.18:效率比拼
通过这一实例可以看出两种操作执行的时间差距很大。如果在程序中频繁地附加字符串,建议使用StringBuilder类。若要使用StringBuilder类最后输出字符串的结果,可使用toString()方法。利用StringBuilder类中的方法可动态地执行添加、插入和删除等字符串的编辑操作。该类的常用方法如下:
1.append()方法:将指定的字符串或对象添加到此字符序列的末尾。语法如下:
append(content)
2.insert()方法:在此字符序列中插入指定的字符或对象。语法如下:
insert(int offset arg)
3.delete()方法:从此字符序列中删除一系列字符。语法如下:
delete(int start, int end
StringBuilder bf = new StringBuilder("StringBuilder"); //创建字符串生成器bf.delete(5,10); //删除的子字符串System.out.println(bf.toString()); //此时输出的信息为Strinder
结束力