使用java Scanner获取字符串中的标记数

问题描述 投票:2回答:6

有没有办法获取由Java中的Method Scanner获取的字符串中的标记数?

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

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

java
6个回答
6
投票

试试这个:

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

有关更多详细信息,请参阅StringTokenizer


2
投票

不幸的是,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);

1
投票

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

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

0
投票

你可以使用Matcher

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

0
投票

您可以使用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;
}

0
投票
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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.