
String中常见的算法题:
1.模拟trim()方法,去除字符串首尾的空格
public String cutBlank(String str) {
String target="";
if(!str.isEmpty()) {
char [] ch=str.toCharArray();
for(int i=0;i
2.将字符串中指定部分进行反转,例如abcdefg->abfedcg
public static String reverse(String str,int start,int end) {
String s="";
if(!str.isEmpty() && end > start && start>=1) {
String target=str.substring(start-1, end);
char [] ch=target.toCharArray();
for(int i=0;i
3.获取一个字符串在另一个字符串中出现的次数,例如"ab"在"abkkcadkabkebfkabkskab"中出现的次数
public static int countMethod(String target,String source) {
int count=0;
int i=0;
if(!target.isEmpty() && !source.isEmpty()) {
while(true) {
if(source.indexOf(target, i)!=-1) {
int index=source.indexOf(target, i);
i=index+target.length();
count++;
}else {
break;
}
}
}else {
throw new RuntimeException("输入的字符串不正确");
}
return count;
}
4.获取两个字符串中的最大相同子串 str1="abcwerthelloyuiodef" str2="cvhellobnm"
public static String maxSubString(String target,String source) {
String s="";
int count=0;
if(!target.isEmpty() && !source.isEmpty()) {
if(source.contains(target)) {
return target;
}else {
for(int i=0;icount) {
count=count1;
s=str;
}
}else {
break;
}
}
}
}
}
}else {
throw new RuntimeException("输入的字符串不正确");
}
return s;
}
5.对字符串中的字符进行自然顺序排序 "befa"->"abef"
public static String sort(String str) {
String s;
if(!str.isEmpty()) {
char [] ch=str.toCharArray();
for(int i=0;ich[j+1]) {
char temp=ch[j];
ch[j]=ch[j+1];
ch[j+1]=temp;
}
}
}
s=new String(ch);
}else {
throw new RuntimeException("输入的字符串不正确");
}
return s;
}
String、StringBuffer、StringBuilder三者的区别
1.String是不可变的字符序列,内部定义的是final的char数组接收数据
2.StringBuffer是可变的字符序列,内部定义的char数组接收数据,每个方法都是同步方法所以是线程安全的,所以效率很低一些
3.StringBuilder是可变的字符序列,内部定义的是char数组接收数据,线程不安全的,效率会高一些
4.StringBuffer默认的数组长度是16,如果添加的字符串长度超过默认的容量,会进行扩容。
扩容的规则是2*n+2 (n为原来的容量),StringBuffer中的length方法返回的是添加的元素个数。
6.不是多线程问题的话建议使用StringBuilder,建议使用StringBuffer的构造器定义容量的大小
7.效率上:StringBuilder > StringBuffer > String
long start=0L;
long end=0l;
String str="";
StringBuffer buffer=new StringBuffer("");
StringBuilder builder=new StringBuilder("");
start=System.currentTimeMillis();
for(int i=1;i<=20000;i++) {
str+=i;
}
end=System.currentTimeMillis();
System.out.println(end-start);
start=System.currentTimeMillis();
for(int i=1;i<=20000;i++) {
buffer.append(String.valueOf(i));
}
end=System.currentTimeMillis();
System.out.println(end-start);
start=System.currentTimeMillis();
for(int i=1;i<=20000;i++) {
builder.append(String.valueOf(i));
}
end=System.currentTimeMillis();
System.out.println(end-start);
StringBuffer的方法:
1.增 append()、insert(int offset,String xxx)
//增 append(),insert(int offset,String xxx)
StringBuffer sb=new StringBuffer("abc");
sb.append("def");
System.out.println(sb);
System.out.println("****************");
sb.insert(sb.length(),"ghi");
System.out.println(sb);
2.删 delete(int start,int end)、deleteCharAt(int index)
//删 delete(int start,int end) [start,end) deleteCharAt(int index)
StringBuffer sb=new StringBuffer("abcefg");
System.out.println(sb.delete(3, sb.length()));
System.out.println(sb.deleteCharAt(0));
3.改 setCharAt(int index,char c)、replace(int start,int end,String str)
// 改 setCharAt(int index,char c) replace(int start,int end,String str)
StringBuffer sb=new StringBuffer("abcefg");
sb.setCharAt(0, 'A');
System.out.println(sb);
sb.replace(1, sb.length(), "BCEFG");
System.out.println(sb);
4.查 charAt(int index)、indexOf(String str,int fromIndex)
5.反转reverse()
StringBuffer sb=new StringBuffer("abcefg");
System.out.println(sb.reverse());