2014-06-13 161 views
-3

输入迭代通过字符串

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 

后第2次循环中的数据相同。

我做错了什么。

或者我们可以用更好的方法来解决吗?

+0

向下选民请评论 –

回答

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 

如果您选择,我会建议读了一些正则表达式,这可能帮助:

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 
2

试试这个:cnt += eachBody.length(); 的问题是,cnt总是会在你的代码5所以cnt+extra总会第二次运行导致同一子后第一次运行,由于该范围是完全一样的后留6

1

错误出现在cnt = eachBody.lenght()。通过这种方式,您总是将5分配给cnt,因此子字符串在第一次迭代后总是给出prebody.subString(6,11),即“C”。要解决它只是使用cnt += eachBody.lenght()

我建议你采取另一种方法,如String#split方法与正则表达式(CRF Alan Moore answer):

preBody.split("(?<=\\G.{5})") 

这将返回字符串的阵列,每个与lenght = 5(每lenght“的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]); 
} 

而且,说,你建议立即进行删除尽量让你的代码少..乱了!

1

我的方法是在每次迭代中删除字符串的“used”部分;这样,我只需要每次打印剩余字符串的前五个字符。这是很好的让事情变得简单:

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 = ""; 
     } 
    } 
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); 

} }}