0

我正在导入一个包含无数行的文件"##,##"。每个数字可以是一位或两位数字。

我想String.split(regex)用来获取没有相邻引号的两个数字。

了解到我可以蚕食第一个和最后一个字符并使用非正则表达式拆分,我希望有一个正则表达式可以使它更优雅。

建议?

编辑:

In: "12,3"  
Out: 12  
      3
4

3 回答 3

7

如何使用正则表达式\"(d+),(d+)\"。然后使用Pattern.matcher(input)代替String.split,并通过 获取您的数字Matcher.group(int)

请考虑以下代码段:

String line = "\"1,31\"";

Pattern pattern = Pattern.compile("\"(\\d+),(\\d+)\"");
Matcher matcher = pattern.matcher(line);
if (matcher.matches()) {
    int firstNumber = Integer.parseInt(matcher.group(1));
    int secondNumber = Integer.parseInt(matcher.group(2));
    // do whatever with the numbers
}
于 2013-07-23T13:05:37.507 回答
2

您可以删除每行中的所有双引号字符,然后将字符串拆分为 ,

String toSplit = "\"##,##\"";
String[] splitted = toSplit.replaceAll("\"", "").split(",");

\"在字符串中使用toSplit来模拟"##,##"字符串。

于 2013-07-23T13:07:03.927 回答
0

您也可以在引号处拆分,但这会产生一个长度为 4 的数组。不幸的是,没有办法在一次调用中拆分字符串并从同一字符串中删除String#split其他字符。

作为替代方案,您可以使用 Apache 的StringUtils

String[] n = StringUtils.removeStart( StringUtils.removeEnd( "##,##", "\""), "\"").split(",");

编辑:作为旁注,使用StringUtils将允许在输入字符串的开头或结尾缺少引号。如果您确定它们始终存在,那么简单的substring(...)可能就足够了。(学分去@Ingo)

于 2013-07-23T12:58:53.723 回答