最近在整理string的常用方法,用几道题来加深一下印象:
1.指定位置字符串反转
方式一: 通过char[]
数组实现
public static String reverse1(String str,int start,int end){
if(str != null){
char[] ch = str.toCharArray();
for(int i = start,j = end;i < j;i++,j--){
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
return new String(ch);
}
return null;
}
方式二: 通过字符串拼接,由于字符串是不可变的,每次拼接都会创建新的字符串
public static String reverse2(String str,int start,int end){
if(str != null){
//拼接未指定的前部分
String s = str.substring(0,start);//左闭右开
for(int i = end;i >= start;i--){//从后往前取值
s += str.charAt(i);
}
//拼接未指定的后部分
s += str.substring(end + 1);
return s;
}
return null;
}
方式三: 通过stringBuilder
或stringBuffer
public static String reverse3(String str,int start,int end){
if(str != null){
StringBuilder sb = new StringBuilder(str.length());
sb.append(str.substring(0,start));
for(int i = end;i >= start;i--){//从后往前取值
sb.append(str.charAt(i));
}
sb.append(str.substring(end+1));
return sb.toString();
}
return null;
}
2.获取一个字符串在另一个字符串中出现的次数
public static int countOfSubStr(String mainStr,String subStr){
int mainLen = mainStr.length();
int subLen = subStr.length();
int index = 0;
int count = 0;
if(mainLen >= subLen){
/*方式一:
while ((index = mainStr.indexOf(subStr)) != -1){/首先获取下标
count++;
mainStr = mainStr.substring(index + subStr.length());//根据下标截取字符串
}*/
//方式二
while ((index = mainStr.indexOf(subStr,index)) != -1){//首先获取下标,每次获取指定的字符串都会更新index
count++;
index += subLen;
}
}
return count;
}
3.获取两个字符串的相同最大字串
public static String maxSubLenOfTwoString(String str1,String str2){
if(str1 == null || str2 == null){
return null;
}
int maxLen = str1.length() >= str2.length() ? str1.length() : str2.length();
int minLen = str1.length() < str2.length() ? str1.length() : str2.length();
int len = minLen;
for(int i = 0;i < len;i++){
for(int m = 0,n = len - i;n <= len;m++,n++){
String str = str2.substring(m,n);
if(str1.contains(str)){
return str;
}
}
}
return null;
}