给定一个字符串,逐个翻转字符串中的每个单词。
示例:
输入: "the sky is blue",
输出: "blue is sky the".
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
很老套的题目了
不使用split去掉两边的空格 利用循环和substring跳过中间单词之间的空格 用StringBulider接受 并转化为最终的字符串
代码如下 :
public class ReverseWord
{
public static void main(String[] args)
{
String s1 = " the sky is red ";
String s2 = Reverse(s1);
System.out.println(s1);
System.out.println(s2);
}
public static String Reverse(String task){
//转化为字符数组
char[] array = task.toCharArray();
int left = 0;
int right = task.length()-1;
//去除两边空格
while(left <= right && (task.charAt(left) == ' ') || (task.charAt(right) == ' ')){
if(task.charAt(left) == ' '){
left++;
}
if(task.charAt(right) == ' '){
right--;
}
}
//判断输入的字符串是否合法
if(left > right){
return "";
}
//保存反转之后的单词
StringBuilder result = new StringBuilder();
for(int i=right;i>=left;i--){
char c =task.charAt(i);
if(c == ' '){
result.append(task.substring(i+1,right+1)).append(' ');
while(i > left && task.charAt(i) == ' '){
i--;
}
right = i;
}
System.out.println("当i = "+i+"时,输出:right:"+right+" left: "+left+" c:"+c+" result:"+result);
}
result.append(task.substring(left,right+1));
return result.toString();//StringBulider 转换为一个字符串
}
}