常见操作
- 创建:
String s = "abcdefg";
String s = new String("abcdefg");
String s = new String(buf,0,buf.length());
- 内容查找
String s = "fasdfagas";
s.charAt(index);
s.startsWith("xx");
s.endsWith("xx");
s.contains("xx");
s.indexOf(key);
s.indexOf(key,startAt);
- 切割
String s = "abc def ghe asd";
String[] s_split = s.split(" ");
s_sub = s.subString(start,end);
- 数组和字符串的互换
char[] array = s.toCharArray();
s = new String(array);
- 替换
s.replace("xx","xx");
s.replaceAll("xx","xx");
StringBuffer与StringBuilder
字符串基于final修饰的字符数组,不可对字符串进行增删改操作,上面两个哥们解决了这个问题,二者区别是StringBuffer加了锁,线程安全,StringBuilder在jdk1.5才出现,不同步,线程不安全。
整几个小demo
- myTrim():消除子符串两头空格
public class demo1 {
public static String myTrim(String s) {
//首部
int start = 0;
//尾部
int end = s.length()-1;
//遇到空格,头指针后移
while(start<=end&&s.charAt(start)==' ') {
start++;
}
//遇到空格,尾指针前移
while(start<=end&&s.charAt(end)==' ') {
end--;
}
//根据首尾指针切割字符串
return s.substring(start, end+1);
}
public static void main(String[] args) {
String s = " asdfa fasdf ";
System.out.println('<'+myTrim(s)+'>');
}
}
- 字符串反转
/*将字符串反转,指定开始结束位置将字符串反转*/
public class demo2 {
public static String reverseString(String s) {
//字符串变字符数组
char[] chs = s.toCharArray();
//反转字符数组
reverse(chs,0,s.length());
//数组转字符串
return new String(chs);
}
//反转从下标start开始,到end结束(不包含end)的指定范围内的字符
public static String reverseString(String s ,int start ,int end) {
//字符串变字符数组
char[] c = s.toCharArray();
//反转
reverse(c,start,end);
//数组转字符串
return new String(c);
}
public static void reverse(char[] c,int start ,int end) {
for(int s=start,e=end-1;s<e;s++,e--) {
swap(c,s,e);
}
}
public static void swap(char[] c ,int head,int tail) {
char temp = c[head];
c[head] = c[tail];
c[tail] = temp;
}
public static void main(String[] args) {
String s = "ab cd";
System.out.println(reverseString(s));
System.out.println(reverseString(s,0,2));
}
}
- 统计字符次数
/*获取字符串中指定字符串出现的次数*/
public class demo3 {
public static int countString(String s,String key) {
//计数器
int count = 0;
//位置
int index = 0;
//从index处开始查key的索引,查到了将index移动key的长度位,下次从新的index往后查
while((index =s.indexOf(key, index))!=-1) {
count++;
index+=key.length();
}
return count;
}
public static void main(String[] args) {
System.out.println(countString(" absdkksfaskkfwekk ","kk"));
}
- 公共子串
/*找两个字符串的最长公共子串*/
public class demo4 {
public static String maxSubString(String s1,String s2) {
//默认s2是较短的串
/*
将短串从整个串递减到只有单个字符,依次用contains在长串里找,找到了就返回,
长度为length(),一个串
长度为length()-1,有两个串,0-length()-2,1-length()-1
长度为length()-2,有三个串,0-length()-3,1-length()-2,2-length()-1
...
*/
for(int x = 0;x<s1.length();x++) {
for(int y=0,z=s2.length()-x;z<=s2.length();y++,z++) {
String temp = s2.substring(y, z);
if(s1.contains(temp))
return temp;
}
}
return null;
}
public static void main(String[] args) {
System.out.println(maxSubString("asdfaashellofaberegw", "ongweghello123"));
}
}