2012-10-14 40 views
2

我有一個字符串,它看起來像:正則表達式分裂字符串(Java)的

6 
0 1 1 0 0 
1 1 1 1 0 
0 0 0 1 0 
4 
1 1 0 1 0 
0 0 0 1 0 
1 1 0 1 0 
0 1 1 0 0 

,想分成兩個不同的字符串,如:

6 
0 1 1 0 0 
1 1 1 1 0 
0 0 0 1 0 

和另一個字符串正在:

4 
1 1 0 1 0 
0 0 0 1 0 
1 1 0 1 0 
0 1 1 0 0 

我會使用正則表達式嗎?或者,還有更好的方法? 注:除了6和4的其他數字將始終爲1或0。

+0

你是如何得到字符串?從一個文件? –

+0

您可以逐行遍歷字符串,並且每次看到帶有單個字符的字符串時都可以開始一個新塊。 –

+0

從文本文件中,BufferedReader(新FileReader(「file.txt」)) – meanrims

回答

4

你想拆就換行,但只有當後面的字符(S )只是數字,然後是換行符。
嘗試此正則表達式:

"\n(?=\\d+\\n)" 

它使用一個look ahead斷言上述條件。

下面是一些測試代碼:

public static void main(String[] args) { 
    String input = "6\n0 1 1 0 0\n1 1 1 1 0\n0 0 0 1 0\n4\n1 1 0 1 0\n0 0 0 1 0\n1 1 0 1 0\n0 1 1 0 0"; 
    String[] parts = input.split("\n(?=\\d+\\n)"); 
    System.out.println(Arrays.toString(parts)); 
} 

輸出:

[6 
0 1 1 0 0 
1 1 1 1 0 
0 0 0 1 0, 4 
1 1 0 1 0 
0 0 0 1 0 
1 1 0 1 0 
0 1 1 0 0] 
+0

謝謝,我認爲這將是可能的正則表達式 – meanrims

+0

@Bohemian可以解釋這個'(「\ n(?= \\ d + \\ n)」);'它的工作原理。 – exexzian

+0

@sansix我以爲我做到了。這是我作爲正則表達式回答的第一句話。閱讀答案中的(添加)鏈接,瞭解「展望未來」。 – Bohemian

-2

有可能沒有正則表達式:

String phrase = 
"6 
0 1 1 0 0 
1 1 1 1 0 
0 0 0 1 0 
4 
1 1 0 1 0 
0 0 0 1 0 
1 1 0 1 0 
0 1 1 0 0"; 

String delims = "[4 6]+"; 

String[] parts= phrase.split(delims); 
+4

-1請...這是如此蹩腳,甚至不回答問題 – Bohemian

-1

是的,它需要的正則表達式。您可以創建一個java.util.regex.Pattern.compile("([64][^64]+?)", Pattern.MULTILINE)並創建一個java.util.regex.Matcher,並通過CharSequence開始查找()。每次查找()時,您都可以查詢組(1)。

+0

正則表達式是一種可能的解決方案,但在這種情況下絕對不是必需的。簡單的字符串比較可以完成相同的工作。 – bisserlis

1

你肯定可以用正則表達式來做,就像@Bohemian回答的那樣。但前提是你不打算對結果做任何其他處理。如果你需要進一步解析拆分字符串,並且如果再次使用正則表達式,它會讓你的代碼太複雜。我寧願推薦您將字符串發送到java.util.Scanner,並將整個字符串解析爲一些更有用的數據結構或一組類以供將來使用。