字符串中对单词反转

给定一个字符串,逐个翻转字符串中的每个单词。

示例:  

输入: "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 转换为一个字符串
	}
}

猜你喜欢

转载自blog.csdn.net/xianjianwz/article/details/81045918
今日推荐