对于我的项目,我必须阅读各种输入图表。不幸的是,输入边的格式不同。其中一些以逗号分隔,另一些以制表符分隔,等等。例如:
文件 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/