2015-04-05 62 views
1

我有一個String數組,這樣串接在字符串數組中的所有非數字字符串

String str="9790020760001613 JOHN MATHEWS   -66822.60  65000.00  69000.00  -1822.60 KARL MAX"; 
    String[] token = str.split("\\s+"); 

我就想來連接所有的非數字標記(如約翰·馬修斯),直到一個非數字令牌緊跟數字串所以,上面標記String數組,應該是這樣的:

[9790020760001613 ,JOHN MATHEWS,-66822.60,65000.00,69000.00,-1822.60,KARL MAX] 
+0

'直到一個非數字標記緊跟着數字串'。 KARL MAX如何滿足這種條件? KARL MAX後沒有數字字符串 – CKing 2015-04-05 12:48:56

+0

我們可以再次檢查該令牌後是否沒有數字字符串(MAX) – 2015-04-05 12:49:53

+0

您確定您的字符串不是製表符分隔的嗎?如果是,那麼名稱可能在同一個字段中。 – RealSkeptic 2015-04-05 12:49:56

回答

1

如果匹配是好的:

Pattern pattern = Pattern.compile("((?:-)?([0-9]+(?:\\.)?[0-9]+))|([A-Z]([A-Z/]|\\s)+[A-Z])"); 
Matcher matcher = pattern.matcher("9790020760001613 JOHN MATHEWS S/O   -66822.60  65000.00  69000.00  -1822.60 KARL MAX"); 
List<String> matches = new ArrayList<String>(); 
while (matcher.find()) { 
    matches.add(matcher.group()); 
} 
System.out.println(Arrays.toString(matches.toArray())); 

輸出:

[9790020760001613, JOHN MATHEWS S/O, -66822.60, 65000.00, 69000.00, -1822.60, KARL MAX] 

可能有所改進,但它的工作原理。

+0

它的工作原理,但如果輸入字符串包含像/這樣的字符,它不會希望得到結果。例如,如果不是JOHN MATHEWS,那麼它是JOHN MATHEWS S/O,輸出將是 [9790020760001613,JOHN MATHEWS S,-66822.60,65000.00,69000.00,-1822.60,KARL MAX] – 2015-04-05 13:58:59

+0

@WasimWani您沒有提供像那編輯了答案。 – Bubletan 2015-04-05 17:10:45

相關問題