问题描述:
把一个字符串句子中的每一个单词都进行反转。
样例输入:
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);
}
程序执行结果:
注意最后一行的输入中文中间是有“空格”的。