方式一:不使用正则表达式
import java.util.ArrayList;
import java.util.Scanner;
/**
* 【单词倒排】 (不使用正则表达式)
*
* 描述:
* 对字符串中的所有单词进行倒排。
* 1、构成单词的字符只有26个大写或小写英文字母;
* 2、非构成单词的字符均视为单词间隔符;
* 3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
* 4、每个单词最长20个字母;
*
* A-Z的ascii值为 65-90 a-z的ascii值为 97-122
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String nextLine = sc.nextLine();
StringBuilder sb = new StringBuilder(nextLine);
char[] chars = nextLine.toCharArray();
// 存放非法字符的索引位置
ArrayList<Integer> indexList = new ArrayList<>();
for (int i = 0; i < chars.length; i++) {
if ((chars[i] < 65 || chars[i] > 90) && (chars[i] < 97 || chars[i] > 122)) {
indexList.add(i);
}
}
// 非法字符替换
for (int i = 0; i < indexList.size(); i++) {
sb.replace(indexList.get(i), indexList.get(i) + 1, " ");
}
// 字符串分割,打印输出
String[] split = sb.toString().split(" ");
for (int j = split.length - 1; j >= 0; j--) {
if (!"".equals(split[j])) {
System.out.print(split[j] + " ");
}
}
}
}
方式二:使用正则表达式
import java.util.ArrayList;
import java.util.Scanner;
/**
* 【单词倒排】 (使用正则表达式)
*
* 描述:
* 对字符串中的所有单词进行倒排。
* 1、构成单词的字符只有26个大写或小写英文字母;
* 2、非构成单词的字符均视为单词间隔符;
* 3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
* 4、每个单词最长20个字母;
*
* A-Z的ascii值为 65-90 a-z的ascii值为 97-122
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String nextLine = scanner.nextLine();
//非字母都用作分隔符
String[] splitStr = nextLine.split("[^a-zA-Z]");
StringBuilder str = new StringBuilder();
for (int i = splitStr.length - 1; i >= 0; i--) {
str.append(splitStr[i]);
if(i != 0) {
str.append(" ");
}
}
System.out.println(str);
}
}