gpt4 book ai didi

java - 如何在不知道先验拆分字符的情况下拆分字符串?

转载 作者:行者123 更新时间:2023-12-05 09:36:49 25 4
gpt4 key购买 nike

对于我的项目,我必须阅读各种输入图表。不幸的是,输入边的格式不同。其中一些以逗号分隔,另一些以制表符分隔,等等。例如:

文件 1:

123,45
67,89
...

文件 2

123    45
67 89
...

我不想单独处理每种情况,而是希望自动检测拆分字符。目前我已经开发了以下解决方案:

String str = "123,45";
String splitChars = "";
for(int i=0; i < str.length(); i++) {
if(!Character.isDigit(str.charAt(i))) {
splitChars += str.charAt(i);
}
}

String[] endpoints = str.split(splitChars);

基本上我选择第一行并选择所有非数字字符,然后我使用生成的子字符串作为拆分字符。有没有更简洁的方法来执行此操作?

最佳答案

拆分需要正则表达式,因此您的代码会因多种原因而失败:如果分隔符在正则表达式中有意义(例如,+),它将失败。如果有超过 1 个非数字字符,您的代码也会失败。如果您的代码包含超过 2 个数字,它也会失败。想象一下它包含 hello, world - 然后你的 splitChars 字符串变成 ", " - 你的 split 什么都不做(那会拆分字符串 "test , abc" 一分为二,没有别的)。

为什么不制作一个正则表达式来获取数字,然后找到所有数字序列,而不是专注于分隔符?

无论您愿意与否,您都在使用正则表达式,所以让我们将其正式化并使用模式,而我们正在这样做。

private static final Pattern ALL_DIGITS = Pattern.compile("\\d+");

// then in your split method..

Matcher m = ALL_DIGITS.matcher(str);
List<Integer> numbers = new ArrayList<Integer>();
// dont use arrays, generally. List is better.
while (m.find()) {
numbers.add(Integer.parseInt(m.group(0)));
}

//d+ 是:任意位数。

m.find() 找到下一个匹配项(因此,下一个数字 block ),如果没有匹配项,则返回 false。

m.group(0) 检索整个匹配的字符串。

关于java - 如何在不知道先验拆分字符的情况下拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64942463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com