字串是具有内置语言支持的标准对象。
String类提供了很多功能。String对象时不可改变(只读)的,因此Java还为可变的字符串提供了StringBuffer类。
1,String对象是不可变的。
查看JDK文档你就会发现,String类中每一个看起来会修改String值得方法,
实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。
看以下代码:
public class Immutable
{
public static String upcase(String str){
return str.toUpperCase();
}
public static void main(String args[]){
String q = "hello";
System.out.println(q);
String upQ = upcase(q);
System.out.println(upQ);
System.out.println(q);
}
}
/*---------- 运行java程序 ----------
hello
HELLO
hello
输出完成 (耗时 0 秒) - 正常终止*/
当把q传给upcase()方法时,实际传递的是引用的一个拷贝。其实每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。
2,String上的操作
方法 | 参数,重载版本 | 应用 |
构造器 | 重载版本:默认版本,String,StringBuilder,StringBuffer,char数组,byte数组 | 创建String对象 |
length() | String中字符的个数 | |
charAt() | Int索引 | 取得String中该索引位置上char |
getChars(),getBytes() | 要复制部分的起点和终点索引,复制的目标数组,目标数组的起始索引 | 复制char或byte到一个目标数组 |
toCharArray() | 生成一个char[],包含String的所有字符 | |
equals(),equalsIgnoreCase() | 与之进行比较的String | 比较两个String的内容是否相同 |
compareTo() | 与之进行比较的String | 按词典顺序比较String的内容,比较结果为负数、零或正数。注意,大小写不等价 |
contains() | 要搜索的CharSequence | 如果该String对象包含参数的内容,则返回true |
contentEquals() | 与之进行比较的CharSequence或StringBuffer | 如果该String对象包含参数的内容,则返回true |
startWith() | 可能的起始String。重载版本在参数中加了偏移量 | 返回boolean结果,以表明该String是否以此参数起始 |
endWith() | 该String可能的后缀String | 返回boolean结果,以表明此参数是否为该字符串的后缀 |
indexOf(),lastIndexOf() | 重载版本包括:char,char与起始索引,String,String与起始索引 | 如果该String并不包含此参数,就返回-1,否则返回此参数在String中的起始索引。lastIndexOf是从后向前搜索 |
subString(subSequence()) | 重载版本:起始索引;起始索引+终点坐标 | 返回一个新的String,以包含参数指定的子字符串 |
Concat() | 要连接的String | 返回一个新的String对象,内容为原始String连接上参数String |
replace() | 要替换掉的字符,用来进行替换的新字符。也可以用一个CharSequence来替换另一个CharSequence | 返回替换字符后的新String对象。如果没有替换发生,则返回原始的String对象 |
toLowerCase() toUpperCase() | 将字符的大小改变后,返回一个新String对象。如果没有改变发生,则返回原始的String对象 | |
trim() | 将String两端的空白字符删除后,返回一个新的String对象。如果没有改变发生,则返回原始的String对象 | |
valueOf() | 重载版本:Object;char[];char[],偏移量,字符个数;boolean;char;int;long;float;double | 返回一个表示参数内容的String |
intern() | 为每个唯一的字符序列生成一个仅生成一个String引用 |
来看看一个小练习
/*
编写一个方法计算字符串中给定字符出现的次数
*/
public class GetCharNum
{
public static void main(String args[]){
String str = "abcsdgjeosjdgsajoegtjeiogk";
int charNum = getNum(str,'g');
System.out.println(charNum);
}
public static int getNum(String str,char foo){
//将字符串转为字符数组
char[] newStr = str.toCharArray();
//定义计数器
int count = 0;
/*
通过indexOf和lastIndexOf来确定上下边界,减少检索次数。
*/
for(int i=str.indexOf(foo);i<=str.lastIndexOf(foo);i++){
if(newStr[i] == foo)
count++;
}
return count;
}
}