一位CSDN的朋友在Blink区问的问题
白天确实没时间详解这个题,晚上来解一下(Java语言描述)。 这里不清楚引号算不算,就姑且当没有引号来处理。
很容易想到的是用String的split()方法,因为可以分隔空格,然后形成一个数组,反向遍历就行。 但该想法不够成熟(我理解答主是为了快速给出简洁的思路而不是不会),这样有几个问题:
- 题干给的意思是首尾可以直接空,但是你不能把它算上,所以首尾必须先排掉空白字符。
- 题目中的空白字符可以有多个,必须当做一个处理。
- 反向逆序输出收尾字符不能是空格(即不可简单的循环,str+" ")
这就要求我们认真的分析这个题,在获取输入以后,该去做什么。
- 首先应该是去掉首尾的空白字符,用trim()
- 然后用split()分割,但是分割符不是" “而是”\s+",这是简单的正则表达式,表示任意数量(1~n)的空白字符。
- 随后生成的String数组再进行逆序遍历就行了,建议用StringBuilder,如果你真的看过String加法运算符的实现机理是多么麻烦的话。再就是注意末尾不带空格。
import java.util.Scanner;
public class SplitSpacesTest {
public static void main(String[] args) {
//获取输入
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
//先去掉收尾空格,再去以任意个数空白符作为分隔符(基于正则表达式)
String[] strArr = str.trim().split("\\s+");
//创建StringBuilder对象,不支持多线程(支持也没用,白费性能)
StringBuilder builder = new StringBuilder("");
//获取数组长度后面会用
int len = strArr.length;
//数组空就不做这种处理
if (len > 0) {
for (int i = len-1; i > 0; i--) {
builder.append(strArr[i] + " ");
}
builder.append(strArr[0]);
}
//不论空不空,输出个结果就行
System.out.println(builder.toString());
//关闭输入流
scan.close();
}
}
感想
简单的问题,但是想要处理的没有什么毛病却不简单,我们还是要大胆地多去尝试、仔细地分析判断! 匆忙完成,不足之处还请指出,感谢。