1>题目描述
题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I” 所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符 输入描述:
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。 输出描述:
得到逆序的句子
2>解法一
1、利用String的split()方法分割成字符串数组 2、然后对字符串数组倒序处理 3、最后利用StringBuffer添加字符串
import java. util. *;
public class Main {
public static void main ( String[ ] args) {
Scanner sc = new Scanner ( System. in) ;
String s = sc. nextLine ( ) ;
String[ ] arr = s. split ( " " ) ;
int left = 0 ;
int right = arr. length- 1 ;
String temp = "" ;
while ( left< right) {
temp = arr[ left] ;
arr[ left] = arr[ right] ;
arr[ right] = temp;
left++ ;
right-- ;
}
StringBuffer sb = new StringBuffer ( ) ;
for ( int i= 0 ; i< arr. length; i++ ) {
sb. append ( arr[ i] ) ;
sb. append ( i== arr. length- 1 ? "" : " " ) ;
}
System. out. println ( sb. toString ( ) ) ;
}
}
3、解法二
题目分析:
调整单词的前后顺序而非字母 一个句子不确定所含单词个数 针对以上两点分析。数据结构“双向链表”比较满足。将句子的每个单词依次放到双向链表头部,最后从链表头部依次遍历出单词即可达到句子反向的目的。
public class ReverseWord {
public static void main ( String[ ] args) {
Scanner scanner = new Scanner ( System. in) ;
Deque< String> words = new LinkedList < > ( ) ;
for ( String word : scanner. nextLine ( ) . split ( "\\s+" ) ) {
words. addFirst ( word) ;
}
System. out. println ( String. join ( " " , words) ) ;
}
}
3.1、关于String中的join()用法
List names= new ArrayList < String> ( ) ;
names. add ( "1" ) ;
names. add ( "2" ) ;
names. add ( "3" ) ;
System. out. println ( String. join ( "-" , names) ) ;
String[ ] arrStr= new String [ ] { "a" , "b" , "c" } ;
System. out. println ( String. join ( "-" , arrStr) ) ;
基本上此方法需传入2个参数,
第一个参数是传入一个任意类型数组或集合,
第二个参数是拼接符。
输出:
1-2-3
a-b-c
3.2、关于正则表达式
\s+表达 (\s表示空格 +表示多个)也就是说多个空格