Ответ 1
Попробуйте следующее:
String e = "example";
for (int i = 0; i < e.length() - 1; i++) {
System.out.println(e.substring(i, i+2));
}
Как разбить строку на 2
символы с помощью shifting
.
Например:
Моя строка = todayiscold
Моя цель: "to","od","da","ay","yi","is","sc","co","ol","ld"
но с этим кодом:
Arrays.toString("todayiscold".split("(?<=\\G.{2})")));
Я получаю: ` "to", "da", "yi", "co", "ld"
кто-нибудь помогает?
Попробуйте следующее:
String e = "example";
for (int i = 0; i < e.length() - 1; i++) {
System.out.println(e.substring(i, i+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));
}
Следующий код на основе регулярного выражения должен работать:
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]
В этом случае вы не можете использовать 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