字符串中单词的反转

问题描述:

把一个字符串句子中的每一个单词都进行反转。

样例输入:

hello world
ni hao
you are a good boy
你是一个好孩子

样例输出:

world hello
hao ni
boy good a are you
子孩好个一是你

代码:

public static void main(String[] args) {
		
		String string = "hello world";
		System.out.println("原单词:" + string + "\t 逆序之后单词:"+swapString(string));
		
		String string2 = "ni hao";
		System.out.println("原单词:" + string2 + "\t\t 逆序之后单词:"+swapString(string2));
		
		String string3 = "you are a good boy";
		System.out.println("原单词:" + string3 + "\t 逆序之后单词:"+swapString(string3));
		
		String string4 = "你 是 一 个 好 孩 子";
		System.out.println("原单词:" + string4 + "\t 逆序之后单词:"+swapString(string4));
		
	}

	/*
	 * 	实现整个字符串反正
	 * 	input:	abcdefg
	 * 	output:	gfedcba
	 */
	private static void swap(char[] c, int i, int j) {
		while (i < j) {// 如果i小于j就一直交换
			char tmp = c[j]; // 定义中间变量,初始记录最后字符
			c[j] = c[i];
			c[i] = tmp;
			i++;
			j--;

		}
	}
	
	/*
	 * 	实现字符串单词的反转
	 * 	input:	hello world
	 * 	output: world hello
	 */
	private static String swapString(String s) {
		// 将字符串s变换为字符数组
		char[] c = s.toCharArray();

		// 先对整个字符串进行字符反转操作
		swap(c, 0, c.length - 1);
		
		// 对每个单词以" "为分割点进行字符反转操作
		int start = 0;
		for (int i = 1; i < c.length; i++) {
			if(c[i] == ' ') {
				swap(c, start, i - 1);// 对逆序单词进行反转之后就是正常的单词了
				start = i+1; // 对一个逆序单词反转之后进行下一个单词的开始
			}
		}
		// 最后反转最后一个逆序单词
		swap(c, start, c.length-1);
		
		// 将反转后的单词序列输出
		return new String(c);
	}

程序执行结果:

注意最后一行的输入中文中间是有“空格”的。

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页