空间计数器在Java中不起作用

时间:2018-10-27 20:39:26

标签: java

我试图在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);
}

如您所见,我创建了一个单词计数整数,其中包含创建的令牌数量。然后,我尝试寻找仅包含“”的令牌,然后将字数减少这些字符串的数量。但是,这不能解决我的问题。

5 个答案:

答案 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)

如果要计算单词数,请尝试以下一种方法: 在其他人提到的那些中。

  1. 在这里,此解决方案使用StringTokenizer
String words = "The Hello World     word counter by using     StringTokenizer";
StringTokenizer st = new StringTokenizer(words);
System.out.println(st.countTokens()); // => 8
  1. 通过这种方式,您可以利用regexp来通过单词对字符串进行分割
String words = "The Hello World     word counter by using     regex";
int counter = words.split("\\w+").length;
System.out.println(counter); // => 8
  1. 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(" ");