" hello world I am judy! " 反转为: "judy! am I world hello"
步骤1:去除前后空格,中间多余空格去除
步骤2:反转所有字符串
步骤2:按单词反转
public class StringTest {
public static void main(String[] args) {
char[] strArray = {' ',' ','h', 'e', 'l', 'l', 'o', ' ', ' ', 'w', 'o', 'r', 'l', 'd', ' ', ' ', 'I', ' ', 'a', 'm', ' ', 'j', 'u', 'd', 'y', '!', ' ', ' '};
strArray = reversStrings(strArray);
System.out.println(strArray);
}
private static char[] reMoveWordSpace(char[] strArray) {
int fast = 0;
int slow = 0;
//去掉字符串前面的空格
while (strArray.length > 0 && fast < strArray.length && strArray[fast] == ' ') {
fast++;
}
for (; fast < strArray.length; fast++) {
//去掉字符串中间冗余空格,fast不能删掉最后一个空格,所以需要最后判断['a','','']
if (fast - 1 > 0 && strArray[fast - 1] == strArray[fast] && strArray[fast] == ' ') {
continue;
} else {
strArray[slow++] = strArray[fast];
}
}
//去掉字符串末尾空格,因为fast不能删掉最后一个空格,所以需要最后判断
if (slow - 1 > 0 && strArray[slow - 1] == ' ') {
strArray = resizeArr(strArray, slow - 1);
} else {
strArray = resizeArr(strArray, slow);
}
return strArray;
}
//按索引反转字符串
private static void reverseSpecialString(char[] strArray, int start, int end) {
final int iniStart = start;
final int iniEnd = end;
for (int i = start; i < iniStart+((iniEnd + 1 - iniStart) / 2); i++) {
int ends = end--;
char temp = strArray[i];
strArray[i] = strArray[ends];
strArray[ends] = temp;
}
}
public static char[] reversStrings(char[] strArray) {
//去除前后空格,中间多余空格去除
strArray = reMoveWordSpace(strArray);
//反转所有字符串
reverseSpecialString(strArray, 0, strArray.length - 1);
//单词反转
int fastIndex = 0;
int slowIndex = 0;
for (int i = 0; i < strArray.length; i++) {
//按空格区分单词,之后反转
if (i > 0 && (strArray[i] == ' ' || fastIndex == strArray.length - 1)) {
if (fastIndex != strArray.length - 1) {
//非结尾
reverseSpecialString(strArray, slowIndex, fastIndex-1);
//开始索引跳过空格
slowIndex = ++fastIndex;
}else {
//结尾
reverseSpecialString(strArray, slowIndex, fastIndex);
}
} else {
fastIndex++;
continue;
}
}
return strArray;
}
private static char[] resizeArr(char[] strArray, int size) {
char[] ints = new char[size];
for (int i = 0; i < size; i++) {
ints[i] = strArray[i];
}
return ints;
}
}