2013-08-01 3 views
10

Come dividere una stringa per 2 caratteri con shifting. Ad esempio;Java, Come dividere la stringa con lo spostamento

mia stringa è = todayiscold

mio obiettivo è: "to","od","da","ay","yi","is","sc","co","ol","ld"

ma con questo codice:

Arrays.toString("todayiscold".split("(?<=\\G.{2})"))); 

ottengo: ` "a", "da", "yi", "co", "ld"

qualcuno ti aiuta?

+4

String.split si dividerà in punti specifici. Queste stringhe non possono sovrapporsi per definizione. –

risposta

7

Prova questo:

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

@Jason Sono d'accordo ma una soluzione efficiente di solito più complessa, qui propongo una soluzione semplice e facile da capire. Questa domanda non riguarda affatto le prestazioni. – nkukhar

+1

No, non sono d'accordo. Dovresti pensare alle prestazioni dove fa metro. "L'ottimizzazione prematura è la radice di tutto il male (o almeno la maggior parte di esso) nella programmazione" ([Donald Knuth] (http://en.wikiquote.org/wiki/Donald_Knuth)) – nkukhar

+0

Seconda citazione più fraintesa della storia di programmazione. – jason

4

usare un ciclo:

String test = "abcdefgh"; 
List<String> list = new ArrayList<String>(); 
for(int i = 0; i < test.length() - 1; i++) 
{ 
    list.add(test.substring(i, i + 2)); 
} 
1

non puoi usare split in questo caso, perché tutto spaccatura non fa altro che trovare posto per dividere e freno la stringa in questo luogo, in modo da non puoi far apparire lo stesso personaggio in due parti.

Invece è possibile utilizzare i meccanismi del modello/Matcher come

String test = "todayiscold"; 
List<String> list = new ArrayList<String>(); 

Pattern p = Pattern.compile("(?=(..))"); 
Matcher m = p.matcher(test); 
while(m.find()) 
    list.add(m.group(1)); 

o meglio ancora iterare sopra i vostri personaggi Atring e creare stringhe come in answer

2

Seguendo codice basato regex di D-Rock dovrebbe funzionare:

String str = "todayiscold"; 
Pattern p = Pattern.compile("(?<=\\G..)"); 
Matcher m = p.matcher(str); 
int start = 0; 
List<String> matches = new ArrayList<String>(); 
while (m.find(start)) { 
    matches.add(str.substring(m.end()-2, m.end())); 
    start = m.end()-1; 
} 
System.out.println("Matches => " + matches); 

Il trucco è utilizzare end()-1 dall'ultima partita nelMetodo.

uscita:

Matches => [to, od, da, ay, yi, is, sc, co, ol, ld]