如何将字符串拆分为重叠的字符对

San*_*990 3 java string split

我需要将字符串拆分为字符对,但字符对重叠。例如,我有一个 string Testing,我想要输出:

[Te, es, st, ti, in, ng]
Run Code Online (Sandbox Code Playgroud)

我尝试了一些东西,String.split但没有得到正确的输出:

String s = "Testing";
System.out.println(java.util.Arrays.toString(s.split("(?<=\\G..)")));
Run Code Online (Sandbox Code Playgroud)

这给了我:

[Te, st, in, g]
Run Code Online (Sandbox Code Playgroud)

谁能帮我?

Psh*_*emo 5

String#split方法只是搜索要分割的位置,它不能向结果添加任何新内容。换句话说,你不能像这样分割

"abc"` -> ["ab", "bc"]
Run Code Online (Sandbox Code Playgroud)

因为b只能出现在结果数组中的一个元素中。

您可以做的是使用Pattern/ Matcher,特别Matcher#find()是方法并一次消耗一个字符,同时“偷看”下一个字符而不消耗它。“窥视”部分可以通过环视机制来实现,因为它是零长度技术。

演示:

Pattern p = Pattern.compile(".(?=(.))");
Matcher m = p.matcher(yourString);
while(m.find()){
    System.out.println(m.group() + m.group(1));
}
Run Code Online (Sandbox Code Playgroud)

或者你也可以使用String#substring(start, end)

String data = "Testing";
for (int i=0; i<data.length()-1; i++){
    System.out.println(data.substring(i,i+2));
}
Run Code Online (Sandbox Code Playgroud)

或使用String#charAt(index)

String data = "Testing";
for (int i = 0; i < data.length() - 1;i++) {
    System.out.append(data.charAt(i)).println(data.charAt(i+1));
}
Run Code Online (Sandbox Code Playgroud)