问题是我们必须拆分字符串并写下我们有多少单词。
Scanner in = new Scanner(System.in);
String st = in.nextLine();
String[] tokens = st.split("[\\W]+");
当我将输入作为新行并打印出来时。我已经得到了答案。但我希望它为零。我该怎么办?这里的分隔符都是符号。
答案 0 :(得分:1)
简短回答:要获取str
中的令牌(由空格分隔符确定),您可以执行以下操作:
String str = ... //some string
str = str.trim() + " "; //modify the string for the reasons described below
String[] tokens = str.split("\\s+");
更长的答案:
首先,split()
的参数是分隔符 - 在这种情况下是一个或多个空白字符,即"\\s+"
。
如果仔细查看String#split(String, int)
的Javadoc(这是String#split(String)
调用的内容),您将会看到它的行为。
如果表达式与输入的任何部分都不匹配,那么结果数组只有一个元素,即该字符串。
这就是"".split("\\s+")
将返回一个带有一个空字符串[""]
的数组的原因,因此您需要附加空格以避免这种情况。 " ".split("\\s+")
返回一个包含0个元素的空数组。
如果在此字符串的开头存在正宽度匹配,则在结果数组的开头包含空的前导子字符串。
这就是" a".split("\\s+")
返回["", "a"]
的原因,因此您需要先trim()
字符串从头开始删除空格。
如果n为零,那么模式将被应用尽可能多次,数组可以具有任何长度,尾随空字符串将被丢弃。
由于String#split(String)
调用String#split(String, int)
且limit
参数为零,您可以在字符串末尾添加空格而不更改单词数(因为尾随空字符串将被丢弃) )。
<强>更新强>:
如果分隔符为"\\W+"
,则会略有不同,因为您无法使用trim()
:
String str = ...
str = str.replaceAll("^\\W+", "") + " ";
String[] tokens = str.split("\\W+");
答案 1 :(得分:0)
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String line = null;
while (!(line = in.nextLine()).isEmpty()) {
//logic
}
System.out.print("Empty Line");
}
<强>输出强>
Empty Line