课后题二
public class StringExer1 {
//方式一:转换为char[]
public String reverse(String str,int startIndex,int endIndex){
if(str!=null &&str.length()!=0){
char[] arr = str.toCharArray();
for(int x=startIndex,y=endIndex;x= startIndex; i--) {//数组的索引是5
reverseStr += str.charAt(i);
}
//第三部分,拼接fg
reverseStr += str.substring(endIndex + 1);
return reverseStr;
}
return null;
}
//方式三:使用StringBuffer/StringBuilder替换String 没有多线程就用StringBuilder
public String reverse2(String str,int startIndex,int endIndex) {
if(str!=null){
StringBuilder builder = new StringBuilder(str.length());
//第一部分
builder.append(str.substring(0,startIndex));//左闭右开 ab添加进builder
//第二部分
for (int i = endIndex; i >= startIndex; i--) {
builder.append(str.charAt(i));//倒着添加
}
//第三部分
builder.append(str.substring(endIndex+1));//添加最后一个g
return builder.toString();
}
return null;
}
@Test
public void reverse(){
String str="abcdefg";
String reverse = reverse(str, 2, 5);
System.out.println(reverse);
}
@Test
public void reverse1(){
String str="abcdefg";
String reverse = reverse1(str, 2, 5);
System.out.println(reverse);
}
@Test
public void reverse2(){
String str="abcdefg";
String reverse = reverse2(str, 2, 5);
System.out.println(reverse);
}
}
课后题三
public class StringExer2 {
public int getCount(String mainStr,String subStr){//subStr在mainStr中出现的次数
int mainLength=mainStr.length();
int subLength=subStr.length();
int count=0;
int index;
if(mainLength>subLength){
//要用while, 不能用if,用if的话只执行一次了
while((index=mainStr.indexOf(subStr))!=-1){//返回的是第一个ab的第一个a的索引0
count++;
//找到第一个ab后,索引位置处+2 重新截取一个子串(去掉了第一个ab),然后继续寻找
mainStr=mainStr.substring(index+subStr.length());//得到一个新子串继续判断
}
return count;
}else {
return 0;
}
}
//方式二,改进
public int getCount1(String mainStr,String subStr){//subStr在mainStr中出现的次数
int mainLength=mainStr.length();
int subLength=subStr.length();
int count=0;
int index=0;
if(mainLength>subLength){
//要用while, 不能用if,用if的话只执行一次了
while((index=mainStr.indexOf(subStr,index))!=-1){//从index索引后接着调indexOf
count++;
index+=subLength;//index要加上subStr的长度,然后重新找
}
return count;
}else {
return 0;
}
}
@Test
public void testGetCount(){
String mainStr="abkkcadkabkebfkabkskab";
String subStr="ab";
int count=getCount(mainStr,subStr);
System.out.println(count);
}
@Test
public void testGetCount1(){
String mainStr="abkkcadkabkebfkabkskab";
String subStr="ab";
int count=getCount1(mainStr,subStr);
System.out.println(count);
}
}
课后题四
public class StringExer3 {
//前提 两个字符串中只有一个最大的相同子串
public String getMaxSameString(String str1,String str2){
if(str1!=null&&str2!=null){
String maxStr=(str1.length()>=str2.length())?str1:str2;
String minStr=(str1.length()