Java, Как разбить строку со сдвигом

Как разбить строку на 2 символы с помощью shifting. Например:

Моя строка = todayiscold

Моя цель: "to","od","da","ay","yi","is","sc","co","ol","ld"

но с этим кодом:

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

Я получаю: ` "to", "da", "yi", "co", "ld"

кто-нибудь помогает?

Ответ 1

Попробуйте следующее:

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

Ответ 2

Используйте цикл:

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));
}

Ответ 3

Следующий код на основе регулярного выражения должен работать:

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);

Trick - использовать end()-1 из последнего совпадения в методе find().

Вывод:

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

Ответ 4

В этом случае вы не можете использовать split, потому что все разломы - это место, где можно разбить и заблокировать вашу строку в этом месте, поэтому вы не можете сделать тот же символ в двух частях.

Вместо этого вы можете использовать механизмы Pattern/Matcher, такие как

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));

или еще лучше перебирать символы Atring и создавать подстроки, как в D-Rock answer