回答我自己的问题 - 这可以通过不指定分隔符,并使用next(Pattern)
替代来实现: - 只有
1
fish
2
fish
red
sheep
blue
sheep
编辑 我的做法是错误的:
String input = "1 fish 2 fish red sheep blue sheep";
Pattern animal = Pattern.compile("\\s*(fish|sheep)\\s*");
Scanner sc = new Scanner(input);
while (sc.hasNext()) {
System.out.println(sc.next());
System.out.println(sc.next(animal));
}
输出因为分隔符是空格(不是我真实情况下的情况)。这是一个更好的办法:
String input = "1.fish.2.fish.red.sheep.blue.sheep";
Pattern animal = Pattern.compile("\\.*(fish|sheep)\\.*");
Scanner sc = new Scanner(input);
int endOfLastMatch = 0;
while (sc.hasNext()) {
sc.useDelimiter(animal);
String nextMatch = sc.next();
int startOfCurrentMatch = sc.match().start(0);
if (endOfLastMatch > 0) {
System.out.println(new String(input.getBytes(), endOfLastMatch, startOfCurrentMatch - endOfLastMatch));
}
System.out.println(nextMatch);
endOfLastMatch = sc.match().end();
}
if (endOfLastMatch < input.length()) {
System.out.println(new String(input.getBytes(), endOfLastMatch, input.length() - endOfLastMatch));
}
输出:
1
.fish.
2
.fish.
red
.sheep.
blue
.sheep
'String.contains( “鱼”)'?或者使用正则表达式Matcher –
我的用例比这个更加复杂,不幸的是:)除了's.next()'根本不返回该标记。 –