代码示例:
/* * 1.模拟一个trim方法,去除字符串两端的空格。 2.将一个字符串进行反转。将字符串中指定部分进行反转。比如将“abcdefg”反转为”abfedcg” 3.获取一个字符串在另一个字符串中出现的次数。比如:获取“ ab”在 “abkkcadkabkebfkabkskab”中出现的次数 4.获取两个字符串中最大相同子串。比如: str1 = "abcwerthelloyuiodef“;str2 = "cvhellobnm" 提示:将短的那个串进行长度依次递减的子串与较长 的串比较。 5.对字符串中字符进行自然顺序排序。 提示: 1)字符串变成字符数组。 2)对数组排序,选择,冒泡,Arrays.sort(); 3)将排序后的数组变成字符串。 * */ public class StringDemo { public static void main(String[] args) { String str = " ab c de "; // str = " "; String str1 = MyTrim(str); System.out.println(str1); String str2 = "abcdefg"; String str3 = reverseString(str2, 2, 5); String str4 = reverseString2(str2, 2, 5); System.out.println(str3); //abfedcg System.out.println(str4); //abfedcg int count1 = getTime("abkkcadkabkebfkabkskab", "abk"); int count2 = getTime2("abkkcadkabkebfkabkskab", "abk"); System.out.println(count1); System.out.println(count2); List<String> str5 = getMaxSubString("abcwerthelloyuiodef", "abcwevhellobnm"); System.out.println(str5); String str6 = "rsgesaawepeokeorppgmhmcxvnxzlcxsjdioww"; String str7 = sort(str6); System.out.println(str7); String str8 = "I am a student!"; //!student a am I System.out.println(reverse(str8)); } public static String reverse(String str) { char[] chars = str.toCharArray(); //先逆序整个数组tneduts a ma I swap(chars, 0, chars.length - 1); //再以空格为界逆序每个单词 int start = 0; for (int i = 1; i < chars.length; i++) { if (chars[i] == ' ') { swap(chars, start, i - 1); start = i + 1; } } return String.valueOf(chars); } public static void swap(char[] ch, int a, int b) { char tmp; for (; a < b; a++, b--) { tmp = ch[a]; ch[a] = ch[b]; ch[b] = tmp; } } //5.对字符串中字符进行自然顺序排序。 // 提示: // 1)字符串变成字符数组。 // 2)对数组排序,选择,冒泡,Arrays.sort(); // 3)将排序后的数组变成字符串。 public static String sort(String str) { char[] c = str.toCharArray(); Arrays.sort(c); return new String(c); } // 4.获取两个字符串中最大相同子串。 // 比如: str1 = "abcwerthelloyuiodef";str2 = "cvhellobnm" public static List<String> getMaxSubString(String str1, String str2) { String maxStr = (str1.length() > str2.length()) ? str1 : str2; String minStr = (str1.length() < str2.length()) ? str1 : str2; List<String> list = new ArrayList<>(); int len = minStr.length(); for (int offset = 0; offset < len; offset++) { //offset表示每次需要减去的长度 减到偏移值等于minStr的长度就停止再减去这个操作了 for (int x = 0, y = len - offset; y <= len; x++, y++) { //x表示截取开始的位置 有表示截取结束的位置 y <= len表示结束的位置不能超过minStr的长度 String str = minStr.substring(x, y); if (maxStr.contains(str)) { list.add(str); } } //这一轮跑完说明该最大长度字符串遍历比较结束了就可以add进List了 if (list.size() != 0) { return list; } } return null; } //该方法的实现是找到str2之后,把前面的砍掉再看后面的还有没有相同,这种更高效一些 public static int getTime2(String str1, String str2) { int count = 0; int len; while ((len = str1.indexOf(str2)) != -1) { count++; str1 = str1.substring(len + str2.length()); } return count; } //3.获取一个字符串在另一个字符串中出现的次数。(自己实现的比较低效,实现是以str2的长度在str1从0开始慢慢往后面找) // 比如:获取“ ab”在 “abkkcadkabkebfkabkskab”中出现的次数,判断str2在str1中出现的次数 public static int getTime(String str1, String str2) { int count = 0; int len2 = str2.length(); for (int i = 0; i <= str1.length() - len2; i++) { String str3 = str1.substring(i, i + len2); if (str3.equals(str2)) { count++; } } return count; } //将一个字符串进行反转。将字符串中指定部分进行反转。(方式二) 在考虑SringBuffer将此算法优化! public static String reverseString2(String str, int start, int end) { String str1 = str.substring(0, start); for (int i = end; i >= start; i--) { char c = str.charAt(i); str1 += c; } str1 += str.substring(end + 1); return str1; } //2.将一个字符串进行反转。将字符串中指定部分进行反转。比如将“abcdefg”反转为”abfedcg” public static String reverseString(String str, int start, int end) { char[] c = str.toCharArray(); //字符数组--->字符串 return reverseArray(c, start, end); } public static String reverseArray(char[] c, int start, int end) { for (int i = start, j = end; i <= j; i++, j--) { char temp; temp = c[i]; c[i] = c[j]; c[j] = temp; } //字符数组--->字符串 return new String(c); } //1.模拟一个trim方法,去除字符串两端的空格 public static String MyTrim(String str) { int start = 0; int end = str.length() - 1; while (start < end && str.charAt(start) == ' ') { start++; } while (start < end && str.charAt(end) == ' ') { end--; } return str.substring(start, end + 1); } }