1.模拟一个trim()方法,去除字符串两端的空格。
//2.模拟trim()方法,去除字符串两端的空格 public static String trimTest(String str){ int start = 0; int end = str.length()-1; while(start<=end && str.charAt(end)==' '){ end--; } while(start<=end && str.charAt(start)==' '){ start++; } return str.substring(start,end+1); }
2.将一个字符串进行反转,将指定位置的字符串进行反转,如abcdefgh,反转后输出afedcbgh
public class StringTest { public static void main(String[] args) { String s = reverse1("abcdefgh",1,5); System.out.println(s); String s1 = reverse2("abcdefgh",1,5); System.out.println(s1); String s2 = reverse3("abcdefgh",1,5); System.out.println(s2); } //方法1:利用String类的toCharArray()转换为字符数组,交换数组元素实现 public static String reverse1(String str, int start, int end) { if(str!=null){ char[] chars = str.toCharArray(); for (int i = start,j=end; i < j ; i++,j--) { char temp = chars[i]; chars[i] = chars[j]; chars[j] = temp; } return new String(chars); } return null; } //方法2:利用String类的+(拼接),charAt(index)实现 public static String reverse2(String str, int start, int end){ if(str!=null){ String s1 = str.substring(0, start); for(int i=end;i>=start;i--){ s1+=str.charAt(i); } s1 += str.substring(end+1); return s1; } return null; } //方法3:利用StringBuffer或StringBuilder确定长度,调用追加append(String str)实现 public static String reverse3(String str, int start, int end){ if(str!=null){ StringBuffer stringBuffer = new StringBuffer(str.length()); //初始化StringBuffer底层char[]数组的长度 stringBuffer = stringBuffer.append(str.substring(0,start)); //append():在原有的基础上追加 //for循环中间需要反序的部分 for(int i=end;i>=start;i--){ stringBuffer = stringBuffer.append(str.charAt(i)); } stringBuffer = stringBuffer.append(str.substring(end+1)); return new String(stringBuffer); } return null; } }
3.获取一个字符串在另一个字符串中出现的次数。
比如"ab"在“abkkcadkabkebfkabkskab”中出现的次数。
public class StringTest01 { public static void main(String[] args) { int count = getCount("ab", "abkkcadkabkebfkabkskab"); System.out.println(count); int count1 = getCount1("ab", "abkkcadkabkebfkabkskab"); System.out.println(count1); } //方法1:获取一个字符串在另一个字符串中出现的次数。 public static int getCount(String subStr, String mainStr){ int subLength = subStr.length(); int mainLength = mainStr.length(); int count = 0; int index = 0; if(subLength<=mainLength){ while((index=mainStr.indexOf(subStr))!=-1){ //若index为1表示没有找到,退出循环 count++; mainStr = mainStr.substring(index+subLength); } return count; } return 0; } //方法2:获取一个字符串在另一个字符串中出现的次数。 public static int getCount1(String subStr, String mainStr){ int subLength = subStr.length(); int mainLength = mainStr.length(); int count = 0; int index = 0; if(subLength<=mainLength){ while ((index=mainStr.indexOf(subStr,index))!=-1){ count++; index +=subLength; } return count; } return 0; } }
4.获取两个字符串中的最大相同子串。
str1 = “abcwerthelloyuiodef”,str2 = “cvhellobnm”
提示:将短的那个串进行长度依次递减的子串与较长的串比较。
public class StringTest02 { public static void main(String[] args) { String maxsameString = getMaxsameString("abcwerthelloyuiodefabcdef", "cvhellobnm"); System.out.println(maxsameString); String[] maxsameString1 = getMaxsameString1("abcwerthelloyuiodefabcdef", "cvthellobnmabcdef"); System.out.println(Arrays.toString(maxsameString1)); } //4.查找两个字符串最大的相同子串(假设此处没有相同长度的子串) public static String getMaxsameString(String str1, String str2){ if(str1!=null && str2!=null){ 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++){ //将长度小的字串进行分割,在看是否包含在maxStr中 String subStr = minStr.substring(x,y); if(maxStr.contains(subStr)){ return subStr; //第一次找到时就是最长的字串 } } } } return null; } //扩展:4.查找两个字符串最大的相同子串(可以存在相同长度的子串) public static String[] getMaxsameString1(String str1, String str2) { if(str1!=null&&str2!=null){ String minStr = (str1.length()<str2.length())?str1:str2; String maxStr = (str1.length()>str2.length())?str1:str2; int length = minStr.length(); StringBuffer stringBuffer = new StringBuffer(); for(int i=0;i<length;i++){ for(int x=0,y=length-i;y<=length;x++,y++){ String subString = minStr.substring(x,y); if(maxStr.contains(subString)){ stringBuffer.append(subString+","); } } if(stringBuffer.length()!=0){ break; } } //正则表达式 String[] splitString = stringBuffer.toString().replaceAll(",$","").split("\\,"); return splitString; } return null; } }
5.对字符串中字符进行自然顺序排序。
提示:
1)字符串变成字符数组。
2)对数组排序,选择,冒泡,Arrays.sort();
3)将排序后的数组变成字符串。
public class StringTest03 { public static void main(String[] args) { String str = "acbfedgh"; System.out.println(sortString(str)); String str1 = "acbfedgh"; System.out.println(sortString1(str1)); String str2 = "acbfedgh"; System.out.println(sortString1(str2)); } //1.使用冒泡排序法 public static String sortString(String str){ char[] chars = str.toCharArray(); for(int i=0;i<chars.length;i++){ for(int j=0;j<chars.length-i-1;j++){ if(chars[j]>chars[j+1]){ char temp = chars[j]; chars[j] = chars[j+1]; chars[j+1] = temp; } } } return new String(chars); } //2.使用选择排序算法 public static String sortString1(String str){ char[] chars = str.toCharArray(); for(int i=0;i<chars.length-1;i++){ int index = i; for(int j=i+1;j<chars.length;j++){ if(chars[j]<chars[index]) { index = j; } } char temp = chars[i]; chars[i] = chars[index]; chars[index] = temp; } return new String(chars); } //3.使用Arrays工具类进行排序 public static String sortString2(String str){ char[] chars = str.toCharArray(); Arrays.sort(chars); //注意Arrays.sort()没有返回值 String s = new String(chars); return s; } }