1、Java中,字符串是对象。Java提供String类、StringBuilder类和StringBuffer类来存储和处理字符串。String创建的字符串不能被修改;StringBuilder和StringBuffer类能够创建灵活可变的字符串。
2、构造一个字符串:String newString = new String(“Welcome to jave”)简化为String newString = “Welcome to java”。String是不可变的,一旦创建就不能修改其内容。如果重新赋值newString = “Hello World“,则此时newStringr的第一个对象Welcome to java仍存在,但不能再访问它,因为它指向了新的对象Hello World 。
3、字符串比较:用= =运算符只能比较两个字符串是否指向同一个对象,不能判断是否具有相同的内容。因此可以使用equals()方法对对象内容进行相等比较。比较string1与string2两个字符串方法如下:
If(string1.equals(string2))
System.out.println(“string1 and string2 have the same contents”);
Else
System.out.println(“string1 and string2 are not equal”);
注意:具有相同的内容的字符串并非总要共享同一对象。为安全起见,应该使用equals方法检测两个字符串是否具有相同的内容,使用= =运算符检测两个字符串是否具有相同的引用(即指向同一内存地址)。
也可以使用compareTo方法比较两个字符串。S1.compareTo(S2);当S1与S2相等,返回值为0;当S1按字典序小于S2时,返回值小于0;当S1按字典序大于S2时,返回值大于0。
注:若两个字符串相等,equals方法返回true;如果不等则返回false。CompareTo方法根据一个字符串是否等于、小于、大于另一个字符串,分别返回0,负整数或正正数。
String还提供equalsIgnoreCase和regionMatches方法来比较字符串。equalsIgnoreCase判定两个字符串是否相等时,忽略字母大小写。RegionMatches方法比较两个字符串的某一部分是否相等。
使用str.startsWith(Prefix)来检测str是否以指定前缀Prefix开始,使用str.endsWith(suffix)来检测str是否以指定后缀suffix结束。
4、字符串长度:通过调用length()方法可以等到字符串长度。如s1.length().提取单个字符:方法s.charAt(index)可提取字符串s中的一个指定字符,其中index在0到s.length()-1之间。
5、字符串连接:可以使用concat方法连接两个字符串。如String s3 = s1.concat(s2).等价于String s3= s1 + s2;
6、提取子串:substring方法,两个版本:
a) Public String substring(int beginIndex,int endIndex) //子串从指定的beginIndex开始,扩展到下标为endIndex-1的字符。字串长度为endIndex-beginIndex。
b) Public String substring(int beginIndex) //返回一个新的字符串,子串从指定下标的字符开始,扩展到字符串的结尾。
7、字符串的替换
a) toLowerCase和toUpperCase方法将字符串中的所有字符都转换成小写或大写。
b) trim方法删除字符串两端的空格字符。
c) replace(oldChar , newChar)方法可以将字符串中已存在的字符用新的字符代替。如:”Welcome”.replace(“e”,”A”); returns WAlcomA . “Welcom”.replaceFirst(“e”,”A”);returns WAlcome; “Welcome”.replaceAll(“e”,”A”);returns WAlcomA.
8、获取字符串中的一个字符或子串
a) Public int indexOf(int ch)/ (public int lastIndexOf(int ch)) 返回字符串中与指定字符ch相匹配的第一个(最后一个)字符的下标。如果指定字符不在字符串中,则返回-1.
b) Public int indexOf(int ch, int fromIndex) /(public int lastIndexOf(int ch, int endIndex)) 返回在fromIndex之后(endIndex之前)与给定字符ch相匹配的第一个(最后一个)字符的下标。如果不在以fromIndex开始(endIndex结束)中,则返回-1.
c) Public int indexOf(String str) /(public int lastIndexOf(String str)) 返回与指定字符串相匹配的首(尾)字符的下标。如果参数str不在该字符串,返回-1.
d) Public int indexOf(String str, int fromIndex) /( public int lastIndexOf(String str, int endIndex)) 返回字符串中以fromIndex开始(endIndex结束)与指定字符串str相匹配的子串的第一个(最后一个)字符的下标。如果参数str不在该字符串中,返回-1.
例如:”welcome to java”.indexOf(‘w’) returns 0;
”welcome to java”.lastIndexOf(‘w’) returns 0;
“welcome to java”.indexOf(‘o’,5) returns 9;
“welcome to java”.lastIndexOf(‘o’,5) returns 4;
“ welcome to java”.indexOf(“java”,5) returns 11
“ welcome to java”.lastIndexOf(“java”,5) returns -1
“ welcome to java”.indexOf(“Java”,5) returns -1
“ welcome to java”.lastIndexOf(“come”) returns 3
9、字符串与数组之间的转换
a) 使用toCharArray方法可以将字符串转换成一个字符的数组。如:Char[] chars = “java”.toCharArray();将java转换成数组,则chars[0]为‘j’,chars[1]为’a’,chars[2]为’v’,chars[3]为’a’.
b) 使用getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)方法将下标srcBegin到srcEnd-1的子串复制到字符数组dst中,并且它在dst中的下标是从dstBegin开始的。
c) 使用构造方法String(char[])或valueOf(char[])方法可以将字符数组转换成字符串。例如:String str = new String(new char[]{‘j’,’a’,’v’,’a’}); String str=String.valueOf(new char[]{‘j’,’a’,’v’,’a’});
d) 使用String.valueOf(5.44)可以将双精度5.44转换成字符串”.44”.\
e) 使用Double.parseDouble(str)和Integer.parseInt(str)可以将字符串转换成double值和int值。
10、StringBuffer类
a) 修改缓冲区中的字符串:可以在字符串缓冲区末尾追加新内容;可以在字符串缓冲区的指定位置插入新内容;也可以删除或替换字符串缓冲区中的字符。
StringBuffer strBuf = new StringBuffer();
strBuf.append(“Hello World.”); //在字符串缓冲区末尾追加“hello World”。
strBuf.insert(5,”HTMl end”); //在字符串第5个位置处插入“HEMl end”。
StrBuf.delete(5,9);
strBuf.deleteCharAt(8);
strBuf.reverse(); // 倒置字符串
strBuf.replace(11,15,”html”); //替换从11到14的字符为html
strBuf.setCharAt(0,”w”); //将第0位修改为”w”
提示:如果一个字符串不需要改变,则使用String类而不要使用StringBuffer类。Java对String类做了某些优化,比如共享限定字符串等。
b) 字符串缓冲区处理方法
toString()方法从字符串缓冲区返回字符串。
Capacity()方法返回字符串缓冲区的现有容量,容量是指在不增加缓冲区大小的情况下,能够存储新字符的数量。
Length()方法返回在字符串缓冲中实际存储的字符数量。
setLength(newLength)方法设置字符串缓冲区的长度。
charAT(index)方法返回字符串缓冲区中下标为index的字符。
11、正规表达式regular expression(regex)
a) 字符串匹配:matches(string)方法不仅可以匹配固定的字符,而且能匹配后面带模式的字符串。例如:”Java is fun”.matches(“Java.*”); //return true子串.* 与任何0个或多个字符相匹配。
b) 字符串的替换:replaceAll方法替换所有匹配的子串,而replaceFirst替换第一个匹配的子串。replaceAll(regex:String,replacement:String):String ; replaceFirst(regex:String,replacement:String):String .
c) 字符串分解:split(regex)根据由匹配确定的分隔符将字符串分解成子串。Split(regex,limit)方法,参数limit确定模式要匹配的次数。如果limit<=0,split(regex,limit)与split(regex)相同;如果limit>0,模式最多匹配limit-1次。