2015-07-03 49 views
2

我需要將字符串拆分爲字符對,但這些對重疊。例如,我有一個字符串Testing,我想輸出:如何將字符串拆分爲重疊的字符對

[Te, es, st, ti, in, ng] 

我嘗試了一些事情String.split,但我沒有得到正確的輸出:

String s = "Testing"; 
System.out.println(java.util.Arrays.toString(s.split("(?<=\\G..)"))); 

這給了我:

[Te, st, in, g] 

任何人都可以幫我嗎?

+1

只是做'子()'在一個循環。 –

+0

在這裏檢查[http://stackoverflow.com/questions/5235401/split-string-into-array-of-character-strings –

+0

謝謝翻轉Bulovic,但我得到我的crieteria威斯解決方案下面回答 – Sanket990

回答

4

split只是搜索要拆分的位置,它不能添加任何新的結果。換句話說,你不能像

"abc"` -> "ab", "bc" 

因爲b可以是隻有一個結果的一部分。

你可以做的是使用Pattern/Matcher組合將find,每次消耗一個字符,並且將存儲,而無需耗費它的地方,第二個(所以我們在這裏需要一些zero-length技術像look-around mechanism)。我想到的是這樣

Pattern p = Pattern.compile(".(?=(.))"); 
Matcher m = p.matcher(yourString); 
while(m.find()){ 
    System.out.println(m.group() + m.group(1)); 
} 

你也可以簡單地使用substring(startIncluding, endExcluding)

String data = "Testing"; 
for (int i=0; i<data.length()-1; i++){ 
    System.out.println(data.substring(i,i+2)); 
} 

或使用charAt(index)

String data = "Testing"; 
for (int i = 0; i < data.length() - 1;) { 
    System.out.append(data.charAt(i++)).println(data.charAt(i)); 
} 
+0

感謝Pshemo給我的解決方案 – Sanket990

+0

@ Sanket990我希望給你更多的解釋而不是解決方案。如果我的答案的某些部分不明確,請隨時詢問。否則,我的答案可能對你來說毫無意義。 – Pshemo

+0

我正在運行你的邏輯代碼和我的標準明智這個答案是滿的我已經upvotted你的答案.tnx – Sanket990

0

正如@pshemo's answer說,分裂消耗輸入,所以你不能從分割的兩個部分的輸入中獲取給定的字符。

然而,在這裏,得到這份工作的單行溶液中進行:

Arrays.stream(s.split("")).reduce((a, b) -> {System.out.println(a + b); return b;}); 
相關問題