我正在導入一個文件,其行數爲"##,##"
。每個號碼可以是一個或兩個數字。java String.split(正則表達式)設計
我想用String.split(regex)
得到沒有相鄰引號的兩個數字。
瞭解我可以輕咬第一個和最後一個字符並使用非正則表達式分割,我希望有一個正則表達式可以使它更加優雅。
對此提出建議?
編輯:
In: "12,3"
Out: 12
3
我正在導入一個文件,其行數爲"##,##"
。每個號碼可以是一個或兩個數字。java String.split(正則表達式)設計
我想用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
}
你可以在報價分裂以及但是這將導致長度爲4不幸的數組,有沒有分裂字符串和的方式去除其他字符在使用String#split
的一次調用中使用相同的字符串。
作爲替代方案,你可以使用Apache的StringUtils
:
String[] n = StringUtils.removeStart(StringUtils.removeEnd("##,##", "\""), "\"").split(",");
編輯:作爲一個方面說明,使用StringUtils
將允許丟失的輸入字符串的開始或結束引號。如果你確定他們總是在場,那麼簡單的substring(...)
就足夠了。 (積分轉到@Ingo)
您可以刪除所有雙引號字符,每行再拆由字符串,
String toSplit = "\"##,##\"";
String[] splitted = toSplit.replaceAll("\"", "").split(",");
在toSplit
字符串使用\"
模擬"##,##"
串。
你對「_non-regex split_」有什麼意思?另外,你能提供一個輸入/輸出的例子。 「12,34」變成「12,34」還是「12」和「34」? – jlordo
如果我使用String.split(「,」),我得到兩個一半。每個人都有一個單引號標記...好吧 - 不是真正的「非正則表達式」,但並沒有真正使用正則表達式的強度... – ethrbunny