在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方法根据正则表达式把字符串分解成多个子串。 下面示例代码练习使用各种方法:
package book.oo.String; /** */ /** * 使用字符串类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类。