1.将一个字符串进行反转。将字符串中指定部分进行反转。
1 public class StringDemo { 2 //方式一:转换为char[] 3 public String reverse(String str,int startIndex,int endIndex){ 4 5 if(str != null){ 6 char[] arr = str.toCharArray(); 7 for(int x = startIndex,y = endIndex;x < y;x++,y--){ 8 char temp = arr[x]; 9 arr[x] = arr[y]; 10 arr[y] = temp; 11 } 12 13 return new String(arr); 14 } 15 return null; 16 } 17 18 //方式二:使用String的拼接 19 public String reverse1(String str,int startIndex,int endIndex){ 20 if(str != null){ 21 //第1部分 22 String reverseStr = str.substring(0,startIndex); 23 //第2部分 24 for(int i = endIndex;i >= startIndex;i--){ 25 reverseStr += str.charAt(i); 26 } 27 //第3部分 28 reverseStr += str.substring(endIndex + 1); 29 30 return reverseStr; 31 32 } 33 return null; 34 } 35 //方式三:使用StringBuffer/StringBuilder替换String 36 public String reverse2(String str,int startIndex,int endIndex){ 37 if(str != null){ 38 StringBuilder builder = new StringBuilder(str.length()); 39 40 //第1部分 41 builder.append(str.substring(0,startIndex)); 42 //第2部分 43 for(int i = endIndex;i >= startIndex;i--){ 44 45 builder.append(str.charAt(i)); 46 } 47 //第3部分 48 builder.append(str.substring(endIndex + 1)); 49 50 return builder.toString(); 51 } 52 return null; 53 54 } 55 56 @Test 57 public void testReverse(){ 58 String str = "abcdefg"; 59 String reverse = reverse2(str, 2, 5); 60 System.out.println(reverse); 61 } 62 63 }
2.获取一个字符串在另一个字符串中出现的次数。
1 public class StringDemo { 2 public int getCount(String mainStr,String subStr){ 3 int mainLength = mainStr.length(); 4 int subLength = subStr.length(); 5 int count = 0; 6 int index = 0; 7 if(mainLength >= subLength){ 8 //方式一: 9 // while((index = mainStr.indexOf(subStr)) != -1){ 10 // count++; 11 // mainStr = mainStr.substring(index + subStr.length()); 12 // } 13 //方式二:对方式一的改进 14 while((index = mainStr.indexOf(subStr,index)) != -1){ 15 count++; 16 index += subLength; 17 } 18 19 return count; 20 }else{ 21 return 0; 22 } 23 } 24 25 @Test 26 public void testGetCount(){ 27 String mainStr = "abkkcadkabkebfkaabkskab"; 28 String subStr = "ab"; 29 int count = getCount(mainStr, subStr); 30 System.out.println(count); 31 } 32 }
3.获取两个字符串中最大相同子串。
1 public class StringDemo2 { 2 //前提:两个字符串中只有一个最大相同子串 3 public String getMaxSameString(String str1,String str2){ 4 if(str1 != null && str2 != null){ 5 String maxStr = (str1.length() >= str2.length())? str1 : str2; 6 String minStr = (str1.length() < str2.length())? str1 : str2; 7 int length = minStr.length(); 8 9 for(int i = 0;i < length;i++){ 10 for(int x = 0,y = length - i;y <= length;x++,y++){ 11 String subStr = minStr.substring(x,y); 12 if(maxStr.contains(subStr)){ 13 return subStr; 14 } 15 16 } 17 } 18 19 } 20 return null; 21 } 22 23 // 如果存在多个长度相同的最大相同子串 24 // 此时先返回String[],后面可以用集合中的ArrayList替换,较方便 25 public String[] getMaxSameString1(String str1, String str2) { 26 if (str1 != null && str2 != null) { 27 StringBuffer sBuffer = new StringBuffer(); 28 String maxString = (str1.length() > str2.length()) ? str1 : str2; 29 String minString = (str1.length() > str2.length()) ? str2 : str1; 30 31 int len = minString.length(); 32 for (int i = 0; i < len; i++) { 33 for (int x = 0, y = len - i; y <= len; x++, y++) { 34 String subString = minString.substring(x, y); 35 if (maxString.contains(subString)) { 36 sBuffer.append(subString + ","); 37 } 38 } 39 // System.out.println(sBuffer); 40 if (sBuffer.length() != 0) { 41 break; 42 } 43 } 44 String[] split = sBuffer.toString().replaceAll(",$", "").split("\\,"); 45 return split; 46 } 47 48 return null; 49 } 50 51 @Test 52 public void testGetMaxSameString(){ 53 String str1 = "abcwerthello1yuiodefabcdef"; 54 String str2 = "cvhello1bnmabcdef"; 55 String[] maxSameStrings = getMaxSameString1(str1, str2); 56 System.out.println(Arrays.toString(maxSameStrings)); 57 58 } 59 60 }