2015-09-10 122 views
-2

我有一個字符串,看起來像「12:00:00,2:30:003:45:00,23:45:00」。現在我的要求是我想要逗號之前提取字符串,並希望把他們的名單和其他列表中的其他名單,我已經做了一些事,但不工作,我給我的代碼如何提取Java中的逗號前的字符串

String[] toks = "12:00:00, 2:30:003:45:00,23:45:00". 
       split("\\s*,\\s*|(?<=[ap]m)(?=\\d)"); 

for (String tok: toks){ 
     System.out.printf("[%s]%n", tok); 
    } 

但是,這是給輸出

[12:00:00] 
[2:30:003:45:00] 
[23:45:00] 

我希望的結果是列表中的12:00:00,3:45:00和列表中的2:30:00,23:45:00,如何實現這一點?有人請幫助

+0

任何人都可以幫助我沒有得到什麼? – lucifer

+0

您的問題描述非常不清楚。也許試着解釋你想要做什麼,你想要創建多少列表,哪部分文本應該放在哪個列表以及爲什麼。 – Pshemo

回答

1

這裏有一種方法,你可以做配套,並在2名不同的列表中提取這些元素:

Pattern p = Pattern.compile(
      "(\\d{1,2}:\\d{1,2}:\\d{1,2})\\s*,\\s*(\\d{1,2}:\\d{1,2}:\\d{1,2})"); 

Matcher m = p.matcher("12:00:00, 2:30:003:45:00,23:45:00"); 

List<String> list1 = new ArrayList<>(); 
List<String> list2 = new ArrayList<>(); 

while (m.find()) { 
    list1.add(m.group(1)); 
    list2.add(m.group(2)); 
} 

System.out.printf("%s%n%s%n", list1, list2); 

輸出:

[12:00:00, 3:45:00] 
[2:30:00, 23:45:00] 

有這裏使用2個捕獲組來提取2個不同的數據nt列表:

(\\d{1,2}:\\d{1,2}:\\d{1,2}) # hh:mm:ss timestamp (group #1) 
\\s*,\\s*      # separator is a comma surrounded by optional spaces 
(\\d{1,2}:\\d{1,2}:\\d{1,2}) # hh:mm:ss timestamp (group #2) 
0

下面的代碼應該可以幫助你實現你想要什麼,這種情況下,特別是(在那裏輸入您的字符串):

Pattern p = Pattern.compile("(\\d{1,2}:\\d{2}:\\d{2})\\s*,\\s*(\\d{1,2}:\\d{1,2}:\\d{1,2})(\\d{1,2}:\\d{2}:\\d{2})\\s*,\\s*(\\d{1,2}:\\d{2}:\\d{2})"); 
Matcher m = p.matcher(input); 
if (m.matches) { 
    list1.add(m.group(1)); 
    list1.add(m.group(3)); 
    list2.add(m.group(2)); 
    list2.add(m.group(4)); 
} 

此代碼假設這些都是4倍,第二和第三沒有分隔符,秒部分總是存在並且有兩位數字。

有關該模式的更多信息,請檢查Java documentation

但是,如果可能的話,您應該考慮使用更有用的字符串作爲輸入。如果您可以控制輸出,請考慮在兩組之間放置一個空間或任何其他分隔符,並創建一個SimpleDateFormat來解析它。

0

爲什麼不做類似/.\d:.\d:.\d/的事情來匹配時間模式?

1

什麼

final String s = "12:00:00, 2:30:003:45:00,23:45:00"; 

final Pattern p = Pattern.compile("\\s*(\\d+:\\d\\d:\\d\\d)"); 
final Matcher m = p.matcher(s); 
final List<String> tokens = new ArrayList<>(); 
while(m.find()) { 
    tokens.add(m.group(1)); 
} 
for (String tok: tokens){ 
    System.out.printf("[%s]%n", tok); 
} 
+0

它的做法,但我的要求是把他們放入一個單獨的列表 – lucifer

相關問題