9

如何2shifting. 例如;

我的字符串是=todayiscold

我的目标是:"to","od","da","ay","yi","is","sc","co","ol","ld"

但使用此代码:

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

我得到:`"to","da","yi","co","ld"

有人帮忙吗?

4

4 回答 4

7

尝试这个:

        String e = "example";
        for (int i = 0; i < e.length() - 1; i++) {
            System.out.println(e.substring(i, i+2));
        }
于 2013-08-01T16:15:18.933 回答
3

使用循环:

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));
}
于 2013-08-01T16:19:31.333 回答
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]
于 2013-08-01T16:28:53.570 回答
1

你不能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 的答案

于 2013-08-01T16:26:05.183 回答