我试图在Java中建立一个单词计数器。我试图通过用空格隔开来计算单词。
我已经使用trim函数设法消除了句子前后的空格。但是,对于用户在两个单词之间键入多个空格的情况,我无法进行调整。例如,到目前为止,字符串“ hello world”在hello和world之间有多个空格,将输出大于2的单词数。到目前为止,这是我尝试解决的代码。
public void countWord(){
String tokens[] = userInput.trim().split(" ");
int counter = tokens.length;
for(int i = 0; i < tokens.length; ++i) {
if(Objects.equals(" ", tokens[i])) {
--counter;
}
}
System.out.printf("Total word count is: %d", counter);
}
如您所见,我创建了一个单词计数整数,其中包含创建的令牌数量。然后,我尝试寻找仅包含“”的令牌,然后将字数减少这些字符串的数量。但是,这不能解决我的问题。
答案 0 :(得分:3)
您已经split()
上有空格,因此split()
返回时,任何标记中都将不再有空格。
通过在给定正则表达式的匹配结果 个匹配项之间拆分字符串而计算出的字符串数组
(强调我的)
但是,如果您的String
中有多余的空格,则会有多余的标记,这些标记会缩短长度。而是使用split("\\s+")
。然后只需返回Array
的长度,因为split()
已经将返回所有用空格分隔的标记,这些标记将是所有单词:
System.out.printf("Total word count is: %d", tokens.length);
哪个将打印5
进行测试String
"Hello this is a String"
答案 1 :(得分:3)
尝试正则表达式拆分
userInput.split("\\s+");
答案 2 :(得分:2)
如果要计算单词数,请尝试以下一种方法: 在其他人提到的那些中。
StringTokenizer
。String words = "The Hello World word counter by using StringTokenizer";
StringTokenizer st = new StringTokenizer(words);
System.out.println(st.countTokens()); // => 8
String words = "The Hello World word counter by using regex";
int counter = words.split("\\w+").length;
System.out.println(counter); // => 8
Scanner
用于自己的counter
方法:public static int counter(String words) {
Scanner scanner = new Scanner(words);
int count = 0;
while(scanner.hasNext()) {
count += 1;
scanner.next();
}
return count;
}
如果您要按标题中所述计算空格,可以使用Commons中的StringUtils
int count = StringUtils.countMatches("The Hello World space counter by using StringUtils", " ");
System.out.println(count);
或者,如果您使用Spring,SpringUtils
也可以使用。
int count = StringUtils.countOccurrencesOf("The Hello World space counter by using Spring-StringUtils", " ");
System.out.println(count);
答案 3 :(得分:0)
我认为您可以通过检查tokens[i].equals("")
来轻松修复它。因此,检查单词是否为空字符串。由于使用多个空格时在space
上进行拆分会在数组中创建空字符串对象,因此应该可以使用。
答案 4 :(得分:0)
为什么不清除2个或更多相邻空格的所有出现,然后拆分:
String tokens[] = userInput.trim().replaceAll("\\s+", " ").split(" ");