我需要将一个字符串拆分成两对字符,但这些字符串重叠。例如,我有一个字符串Testing
,我想要输出:
[Te, es, st, ti, in, ng]
我尝试了String.split
的一些事情,但我得不到正确的输出:
String s = "Testing";
System.out.println(java.util.Arrays.toString(s.split("(?<=\\G..)")));
这让我:
[Te, st, in, g]
任何人都可以帮助我吗?
答案 0 :(得分:4)
split
只是搜索要拆分的地方,它无法向结果中添加任何新内容。换句话说,你不能像
"abc"` -> "ab", "bc"
因为b
只能是一个结果的一部分。
你可以做的是使用Pattern
/ Matcher
组合,它将find
一次消耗一个字符,并存储在第二个字符而不消耗它(所以我们需要在这里一些zero-length技术,如look-around mechanism)。我在考虑像
Pattern p = Pattern.compile(".(?=(.))");
Matcher m = p.matcher(yourString);
while(m.find()){
System.out.println(m.group() + m.group(1));
}
您也可以使用substring(startIncluding, endExcluding)
String data = "Testing";
for (int i=0; i<data.length()-1; i++){
System.out.println(data.substring(i,i+2));
}
或使用charAt(index)
String data = "Testing";
for (int i = 0; i < data.length() - 1;) {
System.out.append(data.charAt(i++)).println(data.charAt(i));
}
答案 1 :(得分:1)
正如@pshemo's answer所说,分割会消耗输入,因此您无法从分割的两个部分中的输入中获取给定字符。
但是,这里有一个完成工作的单线解决方案:
Arrays.stream(s.split("")).reduce((a, b) -> {System.out.println(a + b); return b;});