一 String类
1.1 声明字符串
在Java语言中字符串必须包含在一对双引号("")之内。例如:
"25.222" "SFdfsdf" "你好,Java"
可以通过以下语法格式来声明字符串变量str:
String str;
String:指定该变量为字符串类型。
str:任意有效的标识符,表示字符串变量的名称。
注意:声明字符串变量必须经过初始化才能使用。
1.2 创建字符串
String类的常用构造方法如下:
String(char a[])方法:
用一个字符数组a创建String对象
char a[] = {'h', 'e', 'l', 'l', 'o'};
String s = new String(a);
等价于 String s = new String("hello")
String(char a[], int offset, int length)方法:
提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度。
char a[] = {'h', 'e', 'l', 'l', 'o'};
String s = new String(a, 2, 3);
等价于 String s = new String("llo")
String(char[] value)方法:
该构造方法可分配一个新的String对象,使其表示字符数组参数中所有元素连接的结果。
char a[] = {'h', 'e', 'l', 'l', 'o', '!'};
String s = new String(a);
等价于 String s = new String("hello!")
除上述方法,还通过字符串常量的引用赋值给一个字符串变量:
String str1, str2;
str1 = "Hello, world!";
str2 = "Hello!";
二 连接字符串
对于已声明的字符串,可以对其进行相应的操作。连接字符串就是字符操作中较简单的一种。可以对多个字符串进行连接,也可使字符串与其他数据类型进行连接。
2.1 连接多个字符串
2.1.1 连接多个字符串
使用“+”运算符可实现连接多个字符串的功能。“+”运算符可以连接多个运算符并产生一个String对象。
public class JoinStr {
public static void main(String args[]){
String s1 = new String("hello");
String s2 = new String("world");
String s = s1 + s2;
System.out.println(s);
}
}
2.1.2 连接其他数据类型
连接其他数据类型字符串也可同其他基本数据类型进行连接。如果将字符串同这些数据类型数据进行连接,会将这些数据直接转换成字符串。
public class Link {
public static void main(String args[]){
int booktime = 4;
float practice = 3.4f;
System.out.println("我每天花费" + booktime + "小时看书:" + practice + ”小时上机练习“);
}
}
上例booktime和practice都不是字符串,当它们与字符串相连时会自动调用toString()方法,将其转换成字符串形式,然后参与连接。
只要“+”运算符的一个操作数是字符串,编译器就会将另一个操作数转换成字符串形式。
三 获取字符串信息
3.1 获取字符串长度
使用String类的length()方法可获取声明的字符串对象的长度。
语法如下:
String str = "We are frinend";
int size = str.length();
3.2 字符串查找
String类提供了两种查找字符串的方法,即indexOf()与lastIndexOf()方法。indexOf()方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOf()方法返回的是搜索的字符或字符串最后一次出现的位置。
(1)indexOf(String s)
该方法用于返回参数字符串s在指定字符串中首次出现的索引位置。当调用字符串的indexOf()方法时,会从当前字符串的开始位置搜索s的位置;如果没有检索到字符串s,该方法的返回值是-1。语法如下:
String str = "We are frinend";
int size = str.IndexOf("a")
结果返回字符a在字符串str中的索引位置。
(2)lastIndexOf(String str)该方法用于返回指定字符串最后一次出现的索引位置。当调用字符串的lastIndexOf()方法时,会从当前字符串的开始位置检索参数字符串str,并将最后一次出现str的索引位置返回。如果没有检索到字符串str,该方法返回-1。语法如下:
String str = "We are frinend";
int size = str.IndexOf("e")
结果返回字符e在字符串str中最后一次出现的索引位置。
如果lastIndexOf()方法中的参数是空字符串""(注意没有空格),则返回的结果与调用该字符串length()方法的返回结果相同。
3.3 获取指定索引位置的字符
使用 charAt() 方法 可将 指定 索引 处 的 字符 返回。 语法 如下:
str.charAt(int index)
str:任意字符串。
index: 整型值,用于指定要返回字符的下标。
四 字符串操作
4.1 获取子字符串
通过String类的substring()方法可对字符串进行截取。这些方法的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从0开始的。substring()方法被两种不同的方法重载,来满足不同的需要。
(1)substring(int beginIndex)
该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串。语法如下:
str.substring(int beginIndex)
其中,beginIndex指定从某一索引处开始截取字符串。
(2)substring(int beginIndex,int endIndex)
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的子串。语法如下:
substring(int beginIndex, int endIndex)
beginIndex:开始截取子字符串的索引位置。endIndex:子字符串在整个字符串中的结束位置。
4.2 去除空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格。语法如下:
str.trim()
其中,str为任意字符串对象。
4.3 字符串替换
replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。语法如下:
str.replace(char oldChar, char newChar)
oldChar:要替换的字符或字符串。newChar:用于替换原来字符串的内容。
replace()方法返回的结果是一个新的字符串。如果字符串oldChar没有出现在该对象表达式中的字符串序列中,则将原字符串返回。
4.4 判断字符串的开始与结尾
startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型。
startsWith()方法
该方法用于判断当前字符串对象的前缀是否是参数指定的字符串。语法如下:
str.startsWith(String prefix)
其中,prefix是指作为前缀的字符。
endsWith()方法
该方法用于判断当前字符串是否是以给定的子字符串结束。语法如下:
str.endsWith(String suffix)
其中,suffix是指作为后缀的字符串。
4.5 判断字符串是否相等
对字符串对象进行比较不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回false。
因此,要比较两个字符串内容是否相等,应使用equals()方法和equalsIgnoreCase()方法。
equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true。语法如下:
str.equals(String otherstr)
其中,str、otherstr是参加比较的两个字符串对象。
equalsIgnoreCase()方法
使用equals()方法对字符串进行比较时是区分大小写的,而使用equalsIgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为boolean类型。语法如下:
str.equalslgnoreCase(String otherstr)
其中,str、otherstr是参加比较的两个字符串对象。
4.6 按字典顺序比较两个字符串
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将此String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0。
语法如下:
str.comparaTo(String otherstr)
其中,str、otherstr是参加比较的两个字符串对象。ompareTo()方法只有在equals(Object)方法返回true时才返回0。
如下例:
public class wordbook{
public static void main(String args[]) {
String str = new String("b");
String str2 = new String("a");
String str3 = new String("c");
System.out.println(str + "compareTo" + str2 + ":" + str.comparaTo(str2));
System.out.println(str + "comparaTo" + str3 + ":" + str.comparaTo(str3));
}
}
运行结果如图:
4.7 字母大小写转换
字符串的toLowerCase()方法可将字符串中的所有字符从大写字母改写为小写字母,而toUpperCase()方法可将字符串中的小写字母改写为大写字母。
toLowerCase()方法
该方法将String转换为小写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中每个该进行小写转换的字符都转换成等价的小写字符。字符长度与原字符长度相同。语法如下:
str.toLowerCase()
其中,str是要进行转换的字符串。
toUpperCase()方法
该方法将String转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则返回一个新字符串,将原字符串中每个该进行大写转换的字符都转换成等价的大写字符。新字符长度与原字符长度相同。语法如下:
str.toUpperCase()
其中,str是要进行转换的字符串。使用toLowerCase()方法和toUpperCase()方法进行大小写转换时,数字或非字符不受影响。
4.8 字符串分割
使用split()方法可以使字符串按指定的分割字符或字符串对内容进行分割,并将分割后的结果存放在字符串数组中。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 l,String format,Object…args)
l:格式化过程中要应用的语言环境。如果l为null,则不进行本地化。format:格式字符串。args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。
5.1 日期和时间字符串格式化
Date date = new Date();
String s = String.format("%te", date);
上例中变量s的值是当前日期中的天数,如今天是15号,则s的值为15;%te是转换符。
常用的日期格式化转换符
5.2 时间格式化
使用format()方法不仅可以完成日期的格式化,也可以实现时间的格式化。时间格式化转换符要比日期转换符更多、更精确,它可以将时间格式化为时、分、秒、毫秒。格式化时间的转换符如下表。
如下例所示:
import java.util.Date;
public class GetDate {
public static void main(String[] args) {
Date date = new Date();
String hour = String.format("%tH", date);
String minute = String.format("%tM", date);
String second = String.format("%tS", date);
System.out.println("现在是:" + hour + "时" + minute + "分" + second + "秒");
}
}
运行结果如下:
5.3 格式化常见的日期时间组合
常规类型的格式化 应用于任何参数类型,如下表:
六 使用正则表达式
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“\d”表示数字0~9中的任何一个,“\d”就是元字符。正则表达式中元字符及其意义如下表:
在正则表达式中“.”代表任何一个字符,因此在正则表达式中如果想使用普通意义的点字符“.”,必须使用转义字符“\”。
在正则表达式中可以使用方括号括起若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。例如,reg="[abc]4",这样字符串a4、b4、c4都是和正则表达式匹配的字符串。方括号元字符还可以为其他格式。如:
[^456]:代表4、5、6之外的任何字符。
[a-r]:代表a~r中的任何一个字母。
[a-zA-Z]:可表示任意一个英文字母。
[a-e[g-z]]:代表a~e,或g~z中的任何一个字母(并运算)。
[a-o&&[def]]:代表字母d、e、f(交运算)。
[a-d&&[^bc]]:代表字母a、d(差运算)。
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如,“A*”代表A可在字符串中出现0次或多次。限定修饰符的用法如下表: