为了账号安全,请及时绑定邮箱和手机立即绑定

useDelimiter() 中的重复值

useDelimiter() 中的重复值

胡子哥哥 2021-12-10 12:41:34
例如,我有这个字符串 String input = "1 2 fish1 3 4 fish2 5 6 fish3 7 8 fish1 9 10 fish2 11 12...";  pairs1 = new Scanner(file.txt).useDelimiter("fish1"); String inputPairs1=pairs1.next().trim(); System.out.println(inputPairs1); pairs2 = new Scanner(pairs1.next()).useDelimiter("fish2"); String inputPairs2=pairs2.next().trim();  System.out.println(inputPairs2); pairs3 = new Scanner(pairs2.next()).useDelimiter("fish3"); String inputPairs3=pairs2.next().trim(); System.out.println(inputPairs3); pairs4 = new Scanner(pairs3.next()).useDelimiter("fish1"); String inputPairs4=pairs4.next().trim(); System.out.println(inputPairs4); pairs5 = new Scanner(pairs4.next()).useDelimiter("fish2"); String inputPairs5=pairs5.next().trim(); System.out.println(inputPairs5);输出:1 23 45 6第二条鱼1后数据读取中断预期输出:1 23 45 67 89 10如果分隔符中的值重复,我想读取数据。正则表达式是一个不错的选择吗?
查看完整描述

2 回答

?
Cats萌萌

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"), "");


查看完整回答
反对 回复 2021-12-10
?
慕田峪7331174

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...


查看完整回答
反对 回复 2021-12-10
  • 2 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信