2014-02-13 141 views
1

的Java分割字符串我有大的字符串是這樣的:在自定義的位置

String = "ABC114.553111.325785.658EFG114.256114.589115.898"; 

我想實現:

String1 = "ABC"; 
String2 = "114.553"; 
String3 = "111.325"; 
String4 = "785.658"; 

有時是無法三個數字,然後點和四位數字後。但總是在數字之前有三個字母。

+2

你能描述的模式?你到目前爲止所展示的內容以及你所說的內容似乎沒有遵循某種模式。 – mikea

+0

是否可以將一些字符插入要分割的字符串中? –

+0

「有時它不是三位數,然後是點和四位數」 - 你怎麼區分這個:114.5533&111.3257'這個:'114.553&3111.3257'給定輸入:'114.5533111.3257'? –

回答

1
String s = "ABC114.553111.325785.658EFG114.256114.589115.898"; 
Matcher prefixes = Pattern.compile("([A-Z]{3})").matcher(s); 
for (String part : s.split("[A-Z]{3}")) { 
    if (part.equals("")) { 
     continue; 
    } 

    prefixes.find(); 
    System.out.println(prefixes.group(0)); 

    for (int i = 0; i < part.length(); i += 7) { 
     System.out.println(part.substring(i, i + 7)); 
    } 
} 

輸出:

ABC 
114.553 
111.325 
785.658 
EFG 
114.256 
114.589 
115.898 
+0

只有你錯過的是OP指定的字母作爲輸出的一部分 – StormeHawke

+0

感謝您的提示,我相應地更新了示例。 – Matt

0

壞選項可以是遍歷串0到n-4。並跟蹤第(i + 3)個字符,如果它是「。」,你知道在哪裏分裂 - 在「我」。

@Matt - 您丟失了字母「ABC」和「EFG」字符串,這些字母應該保留。

2

您可以使用以下正則表達式:

([^\.]){3}(\....)? 

這裏的程序...

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class C { 

    public static void main(String[] args) { 
     String a = "([^\\.]){3}(\\....)?"; 
     String b = "ABC114.553111.325785.658EFG114.256114.589115.898"; 

     Pattern pattern = Pattern.compile(a); 
     Matcher matcher = pattern.matcher(b); 

     while (matcher.find()) { 
      System.out.println("found: " + matcher.group(0)); 
     } 
    } 
} 

輸出

found: ABC 
found: 114.553 
found: 111.325 
found: 785.658 
found: EFG 
found: 114.256 
found: 114.589 
found: 115.898 
+1

http://ideone.com/5kRTG5 – TheKojuEffect