将一个字符串分成四组
问题描述:
输入是;将一个字符串分成四组
"AbrAcadAbRa"
输出应该是;
["AbrA", "brAc", "rAca", "Acad", "cadA", "adAb", "dAbR", "AbRa]
这是我迄今试过的,没有成功;
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "AbrAcadAbRa";
int length = 4;
String subString = "";
for (int i = 0; i < length; i++) {
subString = str.substring(i, length);
System.out.println(subString);
str = str.substring(i);
}
}
它给出错误的输出;
["AbrA", "brA", "Ac", "d"]
答
您的迭代字符串的逻辑不正确,因此您的当前结果。我在下面使用的逻辑是遍历输入字符串的整个长度,但是需要留出很多空间来确保可以采用适当长度的子字符串。然后,在每次迭代中,打印出一个length
子串。
public static void main(String args[]) {
String str = "AbrAcadAbRa";
int length = 4;
String subString = "";
// iterate over the length of the input, offset by the substring length
for (int i = 0; i < str.length()-length+1; i++) {
subString = str.substring(i, i+length);
System.out.println(subString);
// this is wrong; don't modify the original string
//str = str.substring(i);
}
}
输出:
AbrA
brAc
rAca
Acad
cadA
adAb
dAbR
AbRa
演示在这里:
Rextester
答
你必须改变你的代码。你必须计算你的字符串的长度。
int len = str.length();
并开始从0
到len-3
的循环,因为您需要每个字符串4位。所以哟不能追上最后一封信。 我把示例代码
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "AbrAcadAbRa";
int len = str.length();
int length = 4;
String subString = "";
for(int j = 0;j<len-3;j++){
subString = str.substring(j, j+4);
System.out.println(subString);
}
}
输出
AbrA
brAc
rAca
Acad
cadA
adAb
dAbR
AbRa
答
有了流,你可以做到以下几点:
public static void main(String[] args) {
String s = "AbrAcadAbRa";
int length = 4;
IntStream.range(0, s.length() - length + 1)
.forEach(i -> System.out.println(s.substring(i, i + length)));
}
它创建一个整数流直到最后length
字符,然后打印从每个开始的子串到length
。
输出:
阿布拉
布拉奇
RACA
科学院
的cadA
ADAB
dAbR
阿布拉
答
试试这个,
import java.util.*;
import java.lang.*;
class Rextester {
public static void main(String args[]) {
String str = "AbrAcadAbRa";
String newstr = str;
String sub;
int length = 4;
for (int i=0 ; i<str.length()-3 ; i++){
sub = newstr.substring(0, length);
newstr = newstr.substring(1, newstr.length());
System.out.println(sub);
}
}
}
+0
没有解释的转储代码是不好的。另外,OP给你一个'length'参数,使用它。 – user1803551
你的'for'循环的边界不是很理想,因为它们已经硬编码了所需的子字符串长度为4. –