String类用于描述字符串事物,该类提供了多个方法对字符串进行操作。
字符串的常见操作:
1.获取
1.1字符串的长度:
int length();获取字符串的长度。
1.2获取具体位置的字符。
char charAt(int inex);
1.3根据字符获取该字符在字符串中的位置。
int indexOf(int ch);返回ch在字符串中第一次出现的位置;
int indexOf(int ch,int fromIndex);从fromIndex开始查找ch字符,并返回ch字符在字符串中的位置。
int indexOf(String str);返回字符串str在字符串中第一次出现的位置。
int indexOf(String str,int fromIndex);从fromIndex开始查找,返回str在字符串中的位置。
int lastIndexOf(int ch);从后向前查找,返回ch在字符串中最后出现的位置。
2.判断
3.转换2.1字符串中是否包含一个子串。
boolean contains(str);
2.2字符串中是否有内容。
boolean isEmpty();原理:判断字符串是否为0。
2.3字符串是否以指定内容开头。
boolean startsWith(str);
2.4字符串是否以指定内容结尾。
boolean endsWith(str);
2.5判断字符串内容是否相同。
boolean equals(str);
2.6判断字符串内容是否相同,并忽略大小写。
boolean equalsIgnoreCase();
3.1将字符数组转成字符串。
构造函数:String(char[]);
String(char[],offset,count);将字符数组中的一部分转成字符串。
静态方法:static String copyValueOf(char[]);
static String copyValueOf(char[],offset,count);
static String valueOf(char[]);
3.2将字符串转成字符数组。
char[] toCharArray();
3.3将字节数组转成字符串。
String(byte[]);
String(byte[],offset,count);
3.4将字符串转成字节数组。
byte[] getBytes();
3.5将基本数据类型转化为字符串。
static String valueOf(int);
static String valueOf(double);
String.vaulue(3);
4.替换
5.切割String replace(char oldchar,char newchar);
String[] split(regex);
6.子串
String substring(begin);
String substring(begin,end);//包含begin,不包含end
7.转换,去除空格,比较
7.1字符串大小写转换。
String toUpperCase();
String toLowerCase();
7.2将字符串两端的空格除去。
String trim();
7.3对两个字符串进行自然顺序的比较。
int compareTo(String);
String操作实例
class StringChar{
//去除字符串两端的空格
public String trimCh(String str){
int start=0,end=str.length()-1;
while((start<=end)&&(str.charAt(start)==' '))
start++;
while((start<=end)&&(str.charAt(end)==' '))
end--;
//substring()获得的是从start开始到end前(end-1)中间的字符串。
return str.substring(start,end+1);
}
//反转字符串。
public String reverseString(String str){
//将字符串转化为字符数组;
char[] chs=str.toCharArray();
//将字符数组反转;
swap(chs);
//将字符数组转化为字符串;
return new String(chs);
}
public void swap(char[] chs){
for(int start=0,end=chs.length-1;start<end;start++,end--){
char temp=chs[start];
chs[start]=chs[end];
chs[end]=temp;
}
}
//查找子字符串出现的次数;
public int getSubCount(String str,String key){
int count=0;
int index=0;
//反复从index处开始查找key。
while((index=str.indexOf(key,index))!=-1){
count++;
//根据规律,index的值变化规律。
index=index+key.length();
}
return count;
}
//查找两个字符串中最大相同字符串。
public String getMaxSubString(String s1,String s2){
for(int x=0;x<s2.length();x++){
for(int y=0,z=s2.length()-x;z!=s2.length()+1;y++,z++){
String temp=s2.substring(y,z);
if(s1.contains(temp)){
return temp;
}
}
}
return "";
}
}
class TrimDemo{
public static void sop(String str){
System.out.println(str);
}
public static void main(String[] args){
sop("去除字符串两端的空格。");
String s=" hello this world! it is beautifull! ";
String ss=" woi weoi who world! weo lsw aw!";
StringChar sc=new StringChar();
String s1=sc.trimCh(s);
sop("("+s+")");
sop("("+s1+")");
sop("反转字符串。");
String rs=sc.reverseString(s);
sop("("+s+")");
sop("("+rs+")");
sop("查找子字符串出现的次数。");
sop("("+s+")");
sop("is apear count::"+sc.getSubCount(s,"is"));
sop("查找两个字符串中出现的最大相同字符串。");
sop("("+s+")");
sop("("+ss+")");
sop("("+sc.getMaxSubString(s,ss)+")");
}
}
字符缓冲区
stringBuffer 字符串缓冲区
是一个容器,
a.长度可变化。
b.可以直接操作多个数据类型。
c.最终通过toString方法编程字符串。
1.增加
append();insert(index,data);
清空数据缓冲区。
sb.delete(0,sb.length());
2.删除
StringBuffer delete(start,end);删除缓冲区的数据,包含start,不包含end。
StringBuffer deleteCharAt(index);删除指定位置的字符。
3.获取
char charAt(int index);
int indexOf(String str);
int lastIndexOf(String str);
int length();
String substring(int start,int end);
4.修改
StringBuffer replace(start,end,string);
void setCharAt(int index,char ch);
5.反转
StringBuffer reverse();
6.指定数据存储到字符串
void getChars(int srcBegin,int srcEnd,char[],int dstBegin);
jdk1.5之后出现stringBuilder.
StringBuffer是多线程,
StringBuilder 是线程不同步。当数据操作为单线程时,该方法效率高。
StringBuilder 用于多个线程是不安全的。以后建议使用StringBuilder。
java升级三个因素:
提高效率;
简化书写;
提高安全性;