【问题标题】:Obtain number of token in a string with java Scanner使用 java Scanner 获取字符串中的令牌数
【发布时间】:2013-07-08 03:48:37
【问题描述】:

有没有办法获取Java中Method Scanner获取的字符串中token的个数?

我的意思是,我可以使用s = sc.nextLine() 来获取输入行作为字符串。但是在这个字符串上我不能使用lenght() 方法,因为它给了我字符总数(我认为)。

是否有任何标准方法来获取令牌的数量? 提前致谢

【问题讨论】:

  • 我认为没有这样的方法。输入后,扫描仪会为您提供下一个令牌。这意味着,它不知道它有多少令牌。

标签: java


【解决方案1】:
import java.io.*;
import java.util.*;
public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        String delims= "[ .,'!?_@]+";
        int length1=s.split(delims).length;

        System.out.println(length1);
        String[] tokens=s.split(delims);
        for(String token : tokens){
            System.out.println(token);

        }


        scan.close();
    }
}

【讨论】:

  • 你能解释一下代码吗?由于代码仅回答,可能会解决问题,但不能帮助他人理解。
【解决方案2】:

使用split(),它支持正则表达式,不像StringTokenizer

int nbOfTokens = sc.nextLine().split(sc.delimiter().pattern()).length;

【讨论】:

    【解决方案3】:

    试试这个:

    int frequency = new StringTokenizer(myString, " ").countTokens();
    

    更多详情请见StringTokenizer

    【讨论】:

      【解决方案4】:

      您可以使用split 方法管理它:

      public static int getTokenCount(String input) {
          if (input == null) {
              return 0;
          }
          input = input.trim();
          if (input.isEmpty()) {
              return 0;
          }
          return input.split("\\s+").length;
      }
      

      【讨论】:

        【解决方案5】:

        不幸的是,Scanner 无法在不从输入中消耗这些令牌的情况下进行令牌计数。因此,为了访问这些令牌,您必须将它们保存在一个列表中:

        List<String> tokens = new LinkedList<String>();
        Scanner sc = new Scanner(System.in);
        int count = 0;
        while(sc.hasNext()) {
          tokens.add(sc.next());
          count++;
        }
        System.out.println("Number of tokens: "+count);
        

        【讨论】:

          【解决方案6】:

          你可以使用Matcher:

          Pattern pattern = Pattern.compile(token);
          Matcher matcher = pattern.matcher(s);
          int count = 0;
          // Check all occurrences
          while (matcher.find()) {
              ++count;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-30
            • 2017-11-22
            相关资源
            最近更新 更多