句子反转

127 阅读1分钟

题目描述

给定一行句子,每个词之间用空格隔开,要么是全小写英文单词,要么是全大写英文单词,要么是自然数。

要求将这些单词倒序输出。而且对于每个单词,如果是小写词,应当转为大写;如果是大写词,应当转为小写;如果是自然数,应该倒转输出

举一个例子:

we choose TO go 2 the 123 moon

程序应当输出:

MOON 321 THE 2 GO to CHOOSE WE

输入格式

仅一行,即需要反转的句子。

输出格式

仅一行,表示程序对句子的处理结果。

洛谷 www.luogu.com.cn/problem/B36…

mport java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();//输入
        StringBuilder str = new StringBuilder();//用来输出答案的字符串
        StringBuilder a = new StringBuilder();//用于一个单词的字符串
        char[] c = s.toCharArray();//拼接字符串
        for (int i = c.length - 1; i >= 0; i--) {//按题目要求倒叙遍历更加方便

            if (c[i] == ' ') {
                if (!a.isEmpty()) {//非空判断
                    int k = a.charAt(0) - '0';
                    if (k >= 0 && k <= 9) {
                        a.reverse();//字符串转换
                    }
                }
                str.append(a + " ");
                a = new StringBuilder();

            } else {
                char x = c[i];
                if (x >= 'a' && x <= 'z' || x >= 'A' && x <= 'Z') {
                    x ^= 32;//小技巧:大小写转换可直接^
                }
                a.insert(0, x);
            }

        }
        int k = a.charAt(0) - '0';//保证第一个字符串为数字型时能够兼顾
        if (k >= 0 && k <= 9) {
            a.reverse();
        }
        str.append(a);
        System.out.println(str);//输出
    }
}