【问题标题】:Tokenize string with scanner with a String pattern使用带有字符串模式的扫描仪标记字符串
【发布时间】:2015-03-25 11:08:09
【问题描述】:
我必须对一个字符串进行标记,其中标记除以“ - ”。
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);
它不打印任何东西。
【问题讨论】:
标签:
java
java.util.scanner
token
bufferedreader
readline
【解决方案1】:
我不太确定您输入的是哪个输入以及您希望您的代码做什么,但这应该可以帮助您开始:
Scanner scanner = new Scanner(System.in);
String[] parts = scanner.nextLine().split(" - ");
System.out.println(parts[0] + " " + parts[1]);
【解决方案2】:
你可以这样使用:
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();
【解决方案3】:
根据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) 来分隔字符串;这将返回除以分隔符的字符串数组。
【解决方案4】:
这取决于您的输入和您的令牌。如果你编码如下:
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) 的参数不能以“ ”开头。