有没有办法在 Java 中获取 Method Scanner 获得的字符串中的令牌数?
我的意思是,我可以s = sc.nextLine()
用来获取输入行作为字符串。但是在这个字符串上我不能使用lenght()
方法,因为它给了我字符总数(我认为)。
是否存在任何标准方法来获取令牌数量?提前致谢
有没有办法在 Java 中获取 Method Scanner 获得的字符串中的令牌数?
我的意思是,我可以s = sc.nextLine()
用来获取输入行作为字符串。但是在这个字符串上我不能使用lenght()
方法,因为它给了我字符总数(我认为)。
是否存在任何标准方法来获取令牌数量?提前致谢
尝试这个:
int frequency = new StringTokenizer(myString, " ").countTokens();
有关更多详细信息,请参阅StringTokenizer。
不幸的是,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);
使用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();
}
}