输入
preBody = The AThe CThe IThe O{
我正在尝试将输出作为
The A
The C
The I
The O
并忽略小于5的值(bodyCnt)[{]
到目前为止,我所做的是。
int bodyCnt = 5
int cnt = 0;
String eachBody;
int extra = 0;
int limit = preBody.length();
while(limit >= bodyCnt){
eachBody = preBody.substring((cnt+extra), (bodyCnt+cnt));
cnt = eachBody.length();
extra = 1;
limit = limit - eachBody.length();
System.out.println("eachBody : -----"+eachBody);
}
输出
eachBody :----- The A
eachBody :----- The C
eachBody :----- The C
eachBody :----- The C
第二次循环后,数据相同。
我做错了什么。
或者我们能以更好的方式处理相同的事情吗?
答案 0 :(得分:2)
试试这个:cnt += eachBody.length();
问题是代码中的cnt
始终为5
,因此cnt+extra
将在第二次运行后始终保持6
,从而导致第一次运行后的相同子字符串是完全一样的。
答案 1 :(得分:1)
错误在cnt = eachBody.lenght()
。通过这种方式,您总是将{5}分配给cnt
,因此在第一次迭代后,子字符串总是给出prebody.subString(6,11)
,即“C”。要解决此问题,只需使用cnt += eachBody.lenght()
。
我建议你采用另一种方法,例如String#split方法和正则表达式(crf Alan Moore answer):
preBody.split("(?<=\\G.{5})")
这将返回一个String数组,每个数组的长度为lenght = 5(每个“x”字符串的长度)。
代码变为:
String preBody = "The AThe CThe IThe O";
String[] eachBody = preBody.split("(?<=\\G.{5})");
for(int i=0;i<eachBody.lenght();i++){
System.out.println("eachBody : -----"+eachBody[i]);
}
另外,如上所述,你应该尽量减少你的代码..凌乱!
答案 2 :(得分:1)
我的方法是删除使用过的&#39;每次迭代的部分字符串;这样,我只需要每次打印剩余字符串的前五个字符。保持简单是件好事:
String preBody = "The AThe CThe IThe O";
while (preBody.length()>0) {
String part = preBody.substring(0, 5);
System.out.println(part);
if (preBody.length()>5) {
preBody = preBody.substring(5);
} else {
preBody = "";
}
}
答案 3 :(得分:1)
显然你忘了+=
你的cnt = eachBody.length();
所以它总是回复到5
这是一个工作代码
public class HelloWorld{
public static void main(String []args){
String preBody = "The AThe CThe IThe O";
int bodyCnt = 5;
int cnt = 0;
String eachBody;
int extra = 0;
int limit = preBody.length();
while(limit >= bodyCnt){
eachBody = preBody.substring((cnt+extra), (bodyCnt+cnt));
cnt += eachBody.length();
extra=0;
limit = limit - eachBody.length();
System.out.println("eachBody : -----"+eachBody);
} }}
答案 4 :(得分:0)
public class Test{
public static void main(String[] s){
int bodyCnt = 5;
int cnt = 0;
String eachBody;
String preBody = "The AThe CThe IThe O";
int extra = 0;
int limit = preBody.length();
while(limit >= bodyCnt){
eachBody = preBody.substring((cnt+extra), (bodyCnt+cnt));
cnt = cnt + eachBody.length();
extra = 0;
limit = limit - eachBody.length();
System.out.println("eachBody : -----"+eachBody);
}
}
}
执行:
~$ javac Test.java
~$ java Test
eachBody : -----The A
eachBody : -----The C
eachBody : -----The I
eachBody : -----The O
如果您有选择,我建议您阅读Regex,这可能有所帮助:
public class Test{
public static void main(String[] a){
String preBody = "The AThe CThe IThe O";
String[] parts = preBody.split("(?=The)");
for (String s : parts){
if( null != s && !"".equals(s)){
System.out.println(">> " +s );
}
}
}
}
输出
~$ javac Test.java
~$ java Test
>> The A
>> The C
>> The I
>> The O