使用具有字符串模式的扫描仪对字符串进行标记化

Tokenize string with scanner with a String pattern

我必须标记一个字符串,其中标记被“-”分开。

String temp = in.readLine();
input_scanner = new Scanner(temp);

token_temp_token_1 = input_scanner.next();
token_temp_token_2 = input_scanner.next(" - ");
token_temp_token_3 = input_scanner.next(" - ");
System.out.println(token_temp_token_1 + " " + token_temp_token_3);

它不打印任何东西。

我不太确定您输入的是哪个输入以及您希望代码执行什么操作,但这应该可以帮助您入门:

Scanner scanner = new Scanner(System.in);
String[] parts = scanner.nextLine().split(" - "); 
System.out.println(parts[0] + " " + parts[1]);

你可以这样使用:

    String temp = in.readLine();
    input_scanner = new Scanner(temp);

    token_temp_token_1 = input_scanner.next();
    token_temp_token_2 = input_scanner.skip(" - ").next();
    token_temp_token_3 = input_scanner.skip(" - ").next();
    System.out.println(token_temp_token_1 + " " + token_temp_token_3);

或者像这样:

    String temp = in.readLine();
    input_scanner = new Scanner(temp);

    String[] tokens = input_scanner.nextLine().split(" - ");
    if (tokens.length > 2){
        System.out.println(tokens[0] + " " + tokens[2]);
    }
    input_scanner.close();

根据javadoc,方法public String next(String pattern)的参数不是定界符,而是匹配你的token的正则表达式,相当于:

Pattern tokenRegex = Pattern.compile(someRegex);
Matcher tokenizer = tokenRegex.matches(contentToBeTokenized);
List<String> tokens = new ArrayList<>();
while(tokenizer.find()){
    String token = tokenizer.group();
    tokens.add(token)
}

您应该使用 someString.split(delimiter) 来分隔字符串;这将 return 一个字符串数组除以分隔符。

这取决于您的输入和令牌。如果你编码如下:

String str = "Hello World";
Scanner scanner = new Scanner(str);

System.out.println(scanner.next("Hello"));
System.out.println(scanner.next("World"));

你会看到结果的。在下一行打印 Hello 和 World。 scanner.next(String pattern) 的参数不应该以“”开头。