1.将字符串中指定部分进行反转,例如将“abcefg”反转为“abfedcg”。
class StringDemoTest{
public static void main(String[] args) {
StringDemo stringDemo=new StringDemo();
String str="abcdefg";
str=stringDemo.reverse2(str,2,5);
System.out.println(str);
}
}
class StringDemo{
public String reverse(String str,int startindex,int endindex){
if(str!=null&&str.length()!=0){
char arr[]=str.toCharArray();
for(int i=startindex,j=endindex;i<j;i++,j--){
char temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
return new String(arr);
}
return null;
}
public String reverse2(String str,int startindex,int endindex){
if(str!=null){
StringBuilder stringBuilder=new StringBuilder(str.length());
//将str的长度传给StringBuilder的构造器,创建一个长度相同的StringBuilder的对象
stringBuilder.append(str.substring(0,startindex));
//分别调用String、StringBuilder类中拼接字符串的方法:substring、append
for(int i=endindex;i>=startindex;i--){
stringBuilder.append(str.charAt(i));
//调用String类中引用某一索引值处元素的方法:charAt()
}
stringBuilder.append(str.substring(endindex+1));
return stringBuilder.toString();
}
return null;
}
/*
reverse2相比于reverse效率更高,且所占用空间更少,因为StringBuilder是可变的,每次改变
只用在原基础上修改,而String是不可变的,即每一次修改都需要重新创建,要占用更多内存
*/
}
2.获取一个字符串在另一个字符串中出现的次数
class GetcountTest{
public static void main(String[] args) {
String mainstr="ablkjabfabbaasdab";//主字符串
String substr="ab";//待查找字符串
Getcount getcount=new Getcount();
int count=getcount.getcount(mainstr,substr);
System.out.println(count);
}
}
class Getcount{
public int getcount(String mainstr,String substr){
int mainlength=mainstr.length();
int sublength=substr.length();
if(mainlength>=sublength){//不符合此条件,直接返回0
int count=0,index=0;
while((index=mainstr.indexOf(substr,index))!=-1){
/*此处调用了String类中的indexOf方法,该方法可以返回
从索引index开始查找substr在mainstr中首次出现的索引值
若返回值为-1,则表示未找到
*/
count++;
index+=sublength;//此处表示从下一次可能开始的位置查找
}
return count;
}
return 0;
}
}
3.获取两个字符串中最大相同子串(本题方法只满足只有一个最大相同字串)
class GetmaxstringTest{
public static void main(String[] args) {
String str1="safkjhellodkaf";
String str2="s35hellod";
Getmaxstring get=new Getmaxstring();
String str= get.getmaxstring(str1,str2);
System.out.println(str);
}
}
class Getmaxstring{
public String getmaxstring(String str1,String str2){
String maxstr=(str1.length()>str2.length())?str1:str2;
String minstr=(str1.length()<str2.length())?str1:str2;
int length=minstr.length();
for(int i=0;i<length;i++){//查找的轮数最大就是较短字符串的长度
for(int x=0,y=length-i;y<=length;x++,y++){//x,y分别是开始和结束查找的位置
String substr=minstr.substring(x,y);
if(maxstr.contains(substr)){
//此处调用String类函数contains:判断maxstr字符串是否包含substr字符串
return substr;
}//若没找到,则查找位置整体向后挪一位
}
}
return null;
}
}