我正在导入一个包含无数行的文件"##,##"
。每个数字可以是一位或两位数字。
我想String.split(regex)
用来获取没有相邻引号的两个数字。
了解到我可以蚕食第一个和最后一个字符并使用非正则表达式拆分,我希望有一个正则表达式可以使它更优雅。
建议?
编辑:
In: "12,3"
Out: 12
3
如何使用正则表达式\"(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
}
您可以删除每行中的所有双引号字符,然后将字符串拆分为 ,
String toSplit = "\"##,##\"";
String[] splitted = toSplit.replaceAll("\"", "").split(",");
\"
在字符串中使用toSplit
来模拟"##,##"
字符串。
您也可以在引号处拆分,但这会产生一个长度为 4 的数组。不幸的是,没有办法在一次调用中拆分字符串并从同一字符串中删除String#split
其他字符。
作为替代方案,您可以使用 Apache 的StringUtils
:
String[] n = StringUtils.removeStart( StringUtils.removeEnd( "##,##", "\""), "\"").split(",");
编辑:作为旁注,使用StringUtils
将允许在输入字符串的开头或结尾缺少引号。如果您确定它们始终存在,那么简单的substring(...)
可能就足够了。(学分去@Ingo)