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

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

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

现有任何标准方法都可以获得令牌数量吗? 提前致谢

尝试这个:

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

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

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

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

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

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

你可以使用Matcher :

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

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