题目描述
对字符串中的所有单词进行倒排。
说明:
1、每个单词是以26个大写或小写英文字母构成;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;输入描述:
输入一行以空格来分隔的句子
输出描述:
输出句子的逆序
示例1
输入
I am a student
输出
student a am I
代码:
- 方法一:
package cn.c_shuang.demo31;
import java.util.Scanner;
/**
* 单词倒排
* @author Cshuang
* 必须在输出加上trim(),否则会出现以下错误
* 格式错误:您的程序输出的格式不符合要求(比如空格和换行与要求不一致)
* trim()
返回字符串的副本,忽略前导空白和尾部空白。
*/
public class Main {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
while(in.hasNext()){
String s=in.nextLine();
char[]key=s.toCharArray();
for (int i = 0; i < key.length; i++) {
if(!String.valueOf(key[i]).matches("[a-zA-Z]")){
key[i]=' ';
}
}
String[]strArr=String.valueOf(key).split(" ");
StringBuilder sb=new StringBuilder();
for (int i =strArr.length-1; i >=0; i--) {
if(!strArr[i].contains(" ")){
if(i==0){
sb.append(strArr[i]);
}else
sb.append(strArr[i]+" ");
}
}
System.out.println(sb.toString().trim());
}
in.close();
}
}
注意:
①:trim() 返回字符串的副本,忽略前导空白和尾部空白。而不是直接对字符串中的空格也进行忽略。
②:必须在输出部分加上trim(),否则会出现格式错误(事实上,不加我也没觉得哪里有问题)
- 方法二:
package cn.c_shuang.demo31_1;
import java.util.Scanner;
/**
* 单词倒排
* @author Cshuang
*/
public class Main {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
while(in.hasNext()){
String s=in.nextLine();
s=s.replaceAll("[^a-zA-Z]+"," ").trim();
String[] strs=s.split(" ");
for(int i=strs.length-1;i>=1;--i){
System.out.print(strs[i]+" ");
}
System.out.print(strs[0]);
}
in.close();
}
}
注意
①可以对非字母元素进行一键替换
②可以直接对非字母元素进行str.split(“[^a-zA-Z]+”) 正则表示中的“ +”表示多个