保持单词之间的空格位数不变,而不是简单的分割字符串后再分别反转
public class MyReverseWords {
public static void main(String[] args) {
String str = "how are you ? ";
char[] chars = str.toCharArray();
reverseWords(chars);
System.out.println(new String(chars));
}
/**
* 将字符数组的单词分别反转,并保持空格间距不变
* 如how are you ?==>ohw rae oyu ?
* @param chars
*/
public static void reverseWords(char[] chars) {
int begin = -1;
int end = 0;
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c != ' ') {//判断是否为单词,如果是,则标记
if(begin == -1){
begin = i;
end = i;
}else{
end = i;
reverseChars(chars, begin, end);
}
}else{
//一个单词结束,进行反转操作
if(begin != -1){
reverseChars(chars, begin, end);
}
begin=-1;
//end = 0;
}
}
}
/**
* 反转字符数组的指定范围
* @param chars
* @param begin
* @param end
*/
public static void reverseChars(char[] chars , int begin , int end){
while(begin < end){
char swap = chars[begin];
chars[begin] = chars[end];
chars[end] = swap;
begin++;
end--;
}
}
}