在Java中,字符串是一个对象,不是字符的数组,这和其他编程语言不一样。java.lang.String定义了字符串类型。该类提供了字符串的查找、替换等操作字符串的方法。除了java.lang.String类之外,java.lang.StringBuffer也是一个常用的操作字符串的类,它具备了String类的大部分功能,常用于修改字符串,效率比String类要高一些。还有一个类java.util.StringTokenizer,只要用于分解字符串,将字符串分解成多个标记。从JDK1.4开始,Java开始支持正则表达式,java.util.regex包实现了正则表达式。
一,使用String
用String类操作字符串有如下关键技术点
1、String的indexOf和lastIndexOf实例方法用于查找子串。
2、substring实例方法用于截取子串。
3、replace,replaceFirst和replaceAll实例方法用于替换子串。
4、toUpperCase和toLowerCase实例方法用于转换字符串的大小写。
5、charAt实例方法获取字符串上某个位置的字符
6、compareTo和compareToIgnoreCase方法比较字符串,后者是比较时不区分大小写
7、equals方法判断字符串是否相等
8、startsWith方法判断字符串是否以某前缀开始,endswith方法判断字符串是否以某后缀结束。
9、String类能够处理正则表达式,matches方法用于正则表达式匹配字符串;split方法根据正则表达式把字符串分解成多个子串。
下面示例代码练习使用各种方法:
/** *//**
* 使用字符串类String
* @author Administrator
*
*/
public class UsingString ...{
/** *//** 查找子字符串 */
public static void testFindStr(String str) ...{
//返回子字符串在字符串中最先出现的位置,如果不存在,返回负数
System.out.println("str.indexOf("is") = " + str.indexOf("is"));
//可以给indexOf方法设置参数,指定查找的起始位置
System.out.println("str.indexOf("is", 4) = " + str.indexOf("is", 4));
//返回子字符串在字符串中最后出现的位置,如果不存在,返回负数
System.out.println("str.lastIndexOf("is") = " + str.lastIndexOf("is"));
//可以给lastIndexOf方法设置参数,指定查找的结束位置
System.out.println("str.lastIndexOf("is", 1) = " + str.lastIndexOf("is", 1));
}
/** *//** 截取字符串 */
public static void testSubStr(String str) ...{
//subsring方法截取字符串,可以制定截取的起始位置和终止位置
//默认终止位置为字符串末尾
System.out.println("str.substring(2) = " + str.substring(2));
System.out.println("str.substring(2, 9) = " + str.substring(2, 9));
}
/** *//** 替换字符串 */
public static void testReplaceStr(String str) ...{
//将字符串中的某个字符替换成另一个字符
System.out.println("str.replace('i', 'I') = " + str.replace('i', 'I'));
//将字符串中的某个子字符串替换成另一个字符串
System.out.println("str.replaceAll("is", "IS") = " + str.replaceAll("is", "IS"));
//将字符串中的某个子字符串的第一个替换成另一个字符串
System.out.println("str.replaceFirst("is", "IS") = " + str.replaceFirst("is", "IS"));
}
/** *//** 转换大小写 */
public static void testToUpperOrLower(String str) ...{
//将字符串全部变成大写形式
System.out.println("str.toUpperCase() = " + str.toUpperCase());
//将字符串全部变成小写形式
System.out.println("str.toLowerCase() = " + str.toLowerCase());
}
/** *//** 获取字符串中某个位置上的字符 */
public static void testCharAt(String str) ...{
//返回字符串某个位置上的字符
System.out.println("str.charAt(2) = " + str.charAt(2));
//将字符串转换成字符数组,数组长度为字符串的长度
System.out.println(str.toCharArray());
}
/** *//** 比较字符串的大小 */
public static void testCompareStr(String str) ...{
//compareTo方法比较来年改革字符串的大小,比较规则:
//首先比较第一个字符,根据字符编码比,如果字符编码比目标字符小,则返回负数
//如果相等则继续比较第二个字符,大则返回正数
System.out.println("str.compareTo("I am in Chongqing") = " + str.compareTo("I am in Chongqing"));
//compareToIgnoreCase在比较的时候忽略字符的大小写,认为同一字符的大小写相等
System.out.println("str.compareToIngoreCase("I am in Chongqing") = " + str.compareToIgnoreCase("I am in Chongqing"));
}
/** *//** 比较字符串是否相等 */
public static void testEqualsStr(String str) ...{
//比较字符串的值是否相等
System.out.println("str.equals("I am in Chongqing") = " + str.equals("I am in Chongqing"));
//比较字符串的值时不区分大小写
System.out.println("str.equalsIgnoreCase("I am in Chongqing") = " + str.equalsIgnoreCase("I am in Chongqing"));
//判断字符串是否以某个子字符串开始
System.out.println("str.startsWith("Th") = " + str.startsWith("Th"));
//判断字符串是否以某个子字符串结尾
System.out.println("str.endsWith("t!") = " + str.endsWith("t!"));
}
/** *//**
* String类也可以根据正则表达式操作字符串
* 包括字符串匹配、替换和分解
*/
public static void testRegex() ...{
String str = "aab aaa bb ab";
String pattern1 = "^[ a-zA-Z| ]*$"; //该正则表达式表示包含任意多个英文字母或者空格
System.out.println("用正则表达式匹配成功?" + str.matches(pattern1));
System.out.println(str.replaceAll("/s{2,}", " ")); //将字符串中的连续空格换成一个空格
System.out.println(str.replaceFirst("/s{2,}", " ")); //将字符串中的第一个连续空格换成一个空格
//分解字符串,按空格分解,多个连续空格当作一个空格
String[] ss = str.split("/s{1,}");
System.out.println("用正则表达式按空格分解:");
for(int i = 0; i < ss.length; i++) ...{
System.out.println(ss[i]);
}
//限制分解后的数组大小
System.out.println("用正则表达式按空格分解,指定最大分解段数为3:");
ss = str.split("/s{1,}", 3);
for(int i = 0; i < ss.length; i++) ...{
System.out.println(ss[i]);
}
}
public static void main(String[] args) ...{
String str = "This is a String Object!";
System.out.println("str的值:" + str);
UsingString.testFindStr(str);
System.out.println();
UsingString.testSubStr(str);
System.out.println();
UsingString.testReplaceStr(str);
System.out.println();
UsingString.testToUpperOrLower(str);
System.out.println();
UsingString.testCharAt(str);
System.out.println();
UsingString.testCompareStr(str);
System.out.println();
UsingString.testEqualsStr(str);
System.out.println();
UsingString.testRegex();
}
}
程序输出是:
str的值:This is a String Object!str.indexOf("is") = 2
str.indexOf("is", 4) = 5
str.lastIndexOf("is") = 5
str.lastIndexOf("is", 1) = -1
str.substring(2) = is is a String Object!
str.substring(2, 9) = is is a
str.replace('i', 'I') = ThIs Is a StrIng Object!
str.replaceAll("is", "IS") = ThIS IS a String Object!
str.replaceFirst("is", "IS") = ThIS is a String Object!
str.toUpperCase() = THIS IS A STRING OBJECT!
str.toLowerCase() = this is a string object!
str.charAt(2) = i
This is a String Object!
str.compareTo("I am in Chongqing") = 11
str.compareToIngoreCase("I am in Chongqing") = 11
str.equals("I am in Chongqing") = false
str.equalsIgnoreCase("I am in Chongqing") = false
str.startsWith("Th") = true
str.endsWith("t!") = true
用正则表达式匹配成功?true
aab aaa bb ab
aab aaa bb ab
用正则表达式按空格分解:
aab
aaa
bb
ab
用正则表达式按空格分解,指定最大分解段数为3:
aab
aaa
bb ab注意:String是一个不变类,当字符串发生变化时,它会创造一个新的字符串,原字符串不变,因此,为了提高性能,在进行修改字符串的操作时,避免使用String类,可以使用StringBuffer类。