2013-07-23 48 views
0

我正在導入一個文件,其行數爲"##,##"。每個號碼可以是一個或兩個數字。java String.split(正則表達式)設計

我想用String.split(regex)得到沒有相鄰引號的兩個數字。

瞭解我可以輕咬第一個和最後一個字符並使用非正則表達式分割,我希望有一個正則表達式可以使它更加優雅。

對此提出建議?

編輯:

In: "12,3" 
Out: 12 
     3 
+1

你對「_non-regex split_」有什麼意思?另外,你能提供一個輸入/輸出的例子。 「12,34」變成「12,34」還是「12」和「34」? – jlordo

+0

如果我使用String.split(「,」),我得到兩個一半。每個人都有一個單引號標記...好吧 - 不是真正的「非正則表達式」,但並沒有真正使用正則表達式的強度... – ethrbunny

回答

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 
} 
0

你可以在報價分裂以及但是這將導致長度爲4不幸的數組,有沒有分裂字符串和的方式去除其他字符在使用String#split的一次調用中使用相同的字符串。

作爲替代方案,你可以使用Apache的StringUtils

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

編輯:作爲一個方面說明,使用StringUtils將允許丟失的輸入字符串的開始或結束引號。如果你確定他們總是在場,那麼簡單的substring(...)就足夠了。 (積分轉到@Ingo)

+0

你可以拆分子串1太長-1 1 – Ingo

+0

@Ingo哪個子串是你的意思?你能詳細說明一下嗎? – Thomas

+0

它應該是顯而易見的,不應該嗎?如果因爲引號而無法分割「xx,xx」,我可以分割字符串xx,xx – Ingo

2

您可以刪除所有雙引號字符,每行再拆由字符串,

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

toSplit字符串使用\"模擬"##,##"串。