2 回答
TA贡献1805条经验 获得超9个赞
您可以使用java.util.regex.Pattern和 replaceFirst 方法:
String input = "1 2 fish1 1 2 fish2 1 2 fish3 1 2 fish1 1 2 fish2 1 2...";
String s = input.replaceFirst(Pattern.quote("fish1"), "");
TA贡献1828条经验 获得超13个赞
您(大概)在给定的文本上创建一个Scanner调用pairs1,并调用其next()方法两次。
第一次调用返回"1 2 " (打印值)
第二次调用返回" 3 4 fish2 5 6 fish3 7 8 "
第三次调用将返回" 9 10 fish2 11 12..."是您曾经调用过它,但您没有调用过。
pairs2使用文本创建扫描器" 3 4 fish2 5 6 fish3 7 8 "
第一次调用返回" 3 4 " (打印值)
第二次调用返回" 5 6 fish3 7 8 "
第三次调用抛出NoSuchElementException
你为什么对此感到惊讶?
或者是你打算String inputPairs3 = pairs2.next().trim();打电话pairs3,不是pairs2?
好的,让我们假设您已经完成并修复了该问题,因此没有第三次调用pairs2.
扫描器pairs3是用文本创建的" 5 6 fish3 7 8 "
第一次调用返回" 5 6 " (打印值)
第二次调用返回" 7 8 "
扫描器pairs4是用文本创建的" 7 8 "
第一次调用返回" 7 8 " (打印值)
第二次调用抛出NoSuchElementException
如果您只是想要值对,并且不关心分隔符是fish1, fish2, 或fish3,只需将其拆分,即为所有这些设置分隔符(分隔符是正则表达式):
String input = "1 2 fish1 3 4 fish2 5 6 fish3 7 8 fish1 9 10 fish2 11 12...";
try (@SuppressWarnings("resource") Scanner sc = new Scanner(input).useDelimiter("fish[123]")) {
while (sc.hasNext()) {
String inputPairs = sc.next().trim();
System.out.println(inputPairs);
}
}
输出
1 2
3 4
5 6
7 8
9 10
11 12...
添加回答
举报