如何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);
诀窍是使用方法end()-1
中的最后一场比赛find()
。
输出:
Matches => [to, od, da, ay, yi, is, sc, co, ol, ld]
你不能split
在这种情况下使用,因为所有 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 的答案