我试图在两个字符串的子字符串中拆分字符串,例如输入:“ABCDE”我想得到子字符串“AB”“BC”“CD”“DE”。
我试过这个:
String route = "ABCDE";
int i = 0;
while(i < route.length()) {
String sub = route.substring(i,i+2);
System.out.println(sub);
i++;
}
但索引(i)在最后一次迭代中超出范围并导致错误。 如果没有让索引(i)超出范围,有没有办法做到这一点?
答案 0 :(得分:4)
您需要更改循环条件。
while(i < route.length()-1)
在你的代码中我直到(长度为1)并且在子串(i,i + 2)函数中你给出结束索引i + 2。它高于字符串的最大索引。
另外,据我所知,在循环条件下调用库函数不被认为是一种好习惯。
对此的一个很好的替代方法是将长度存储在变量中并在条件中使用它。
int temp = route.length()-1;
while(i<temp){
答案 1 :(得分:2)
这应该可以正常工作
String route = "ABCDE";
if( route.length() > 2){
int i = 0;
do {
String res = route.substring(i,i+2);
System.out.println(res);
i++;
} while (i + 1 < route.length());
}
else{
System.out.println(route);
}
编辑:为字符串添加的边界大小小于2
答案 2 :(得分:0)
添加检查字符串大小以捕获错误:
[endX and endY]
因此,每当i计数器几乎接近字符串大小时,获取最后一个字符。
答案 3 :(得分:0)
正如denis已经指出的那样,代码中的错误处于循环状态。
应该是:m = np.diagonal(M[:9,:9].dot(N[:9,:9]))
。但是,如何简化此逻辑以使用while(i < route.length() - 1)
循环。
for
答案 4 :(得分:0)
您收到StringIndexOutOfBoundsException
,因为您正在尝试访问不存在的String
索引。
要解决此问题,请从
更改循环条件while(i < route.length())
到
while(i < route.length() - 1)
-1
循环while
的最后一次迭代没有i + 2
等于7
1 ,它位于String
之外1}} s bounds。
此问题的另一个(更干净的)解决方案是for
循环:
for(int i = 0; i < route.length() - 1; i++) {
System.out.println(route.substring(j, j + 2));
}
这种情况下的for
循环只是更短,因为声明,条件和增量语句都在一行中。
1:由于7
的{{1}}是独占的,因此6
缩减为endIndex
。
答案 5 :(得分:-1)
String route = "ABCDE";
int i = 0;
while(i < route.length()) {
if(i < route.length() - 1) {
String sub = route.substring(i,i+2);
System.out.println(sub);
} else {
String sub = route.substring(i,i+1);
System.out.println(sub);
i++;
}
,因为当i < route.length()
,i = 5
String sub = route.substring(i,i+2);
超出索引时,请改用i+2=7