迭代字符串

时间:2014-06-13 09:03:45

标签: java string while-loop

输入

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

第二次循环后,数据相同。

我做错了什么。

或者我们能以更好的方式处理相同的事情吗?

5 个答案:

答案 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