题目描述
把字符串 student. a am I
变成正常的顺序
题解
方法1
// 这个方法会把原始字符串两端的空格去掉,字符串中间的超过一个空格还会保持
public static String reverse(String str){
if (str.length() == 0) return str;
str = str.trim();
String[] strs = str.split(" ");
StringBuilder sb = new StringBuilder();
// for (int i = strs.length - 1; i >= 0 ; i--) {
// for (int j = strs[i].length() - 1; j >= 0 ; j--) {
// sb.append(strs[i].charAt(j));
// }
// sb.append(" ");
// }
for(int i = strs.length - 1; i >= 0; --i){
sb.append(strs[i]);
sb.append(" ");
}
return sb.toString().trim();
}
方法2
// 这个方法字符串中间和两端的空格都会保留
public static String reverse1(String str){
if (str.length() == 0) return str;
char[] chars = str.toCharArray();
// 翻转整个句子
coreReverse(chars, 0, chars.length - 1);
// 翻转每个单词
int blank = -1;
for (int i = 0; i < chars.length; i++) {
if (chars[i] == ' '){
int nxtBlank = i;
coreReverse(chars, blank + 1, nxtBlank - 1);
blank = nxtBlank;
}
}
return new String(chars);
}
private static void coreReverse(char[] chars, int low, int high){
while (low < high){
char temp = chars[low];
chars[low] = chars[high];
chars[high] = temp;
low++;
high--;
}
}