题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I” 所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
解题思路:
方法一:利用split函数,划分空格,逆序输出:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String[] split = s.split(" ");
StringBuilder aa = new StringBuilder();
for (int i = split.length - 1; i > 0; i--) {
aa.append(split[i] + " ");
}
aa.append(split[0]);
System.out.print(aa);
}
}
方法二:利用栈先进后出的性质,依次把单词入栈。方法,遍历字符串,临时字符串变量temp存储每个单词,遇到空格就入栈,最后依次弹栈即可。
package 字符串下;
import java.util.Stack;
public class ReverseWord {
public static String reverseWord(String str) {
Stack stack = new Stack();
StringBuilder temp = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) != ' '){
temp.append(str.charAt(i)); //非空格就一直在sb后面添加元素
} else {
stack.push(temp.toString()); //如果遇到空格,就把刚刚添加到sb的字符串入栈,单词入栈
temp = new StringBuilder(); //重新初始化sb
}
}
stack.push(temp.toString()); //添加最后一串单词,也就是第一个单词串
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()) {
sb.append(stack.pop());
sb.append(" ");
}
return sb.deleteCharAt(sb.length()-1).toString();
}
public static void main(String[] args) {
String string = reverseWord("123 asd qwec`");
System.out.println(string);
}
}