Java 如何将字符串分隔为两个字符的子字符串
我试图在两个字符的子字符串中拆分字符串,例如输入:“ABCDE”我想得到子字符串“AB”“BC”“CD”“DE” 我试过这个:Java 如何将字符串分隔为两个字符的子字符串,java,string,Java,String,我试图在两个字符的子字符串中拆分字符串,例如输入:“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++; } Stri
String route = "ABCDE";
int i = 0;
while(i < route.length()) {
String sub = route.substring(i,i+2);
System.out.println(sub);
i++;
}
String route=“ABCDE”;
int i=0;
而(i
但是索引(i)在最后一次迭代中超出范围int,并导致错误。
有没有办法在不使索引(i)超出范围的情况下执行此操作?您需要更改循环条件
while(i < route.length()-1)
while(i
在你的代码中,我一直到(长度-1),而在子字符串(i,i+2)函数中,你给出了结束索引i+2。它高于字符串的最大索引
而且,据我所知,在循环条件中调用库函数被认为不是一个好的实践
- 在每次迭代中,您都会调用此函数,这非常耗时
- 控件在每次迭代中都会转到该子例程
int temp = route.length()-1;
while(i<temp){
int temp=route.length()-1;
而(i您需要更改循环条件
while(i < route.length()-1)
while(i
在您的代码中,我一直到(长度-1),而在子字符串(i,i+2)函数中,您给出了结束索引i+2。它高于字符串的最大索引
而且,据我所知,在循环条件中调用库函数被认为不是一个好的实践
- 在每次迭代中,您都会调用此函数,这非常耗时
- 控件在每次迭代中都会转到该子例程
一个很好的替代方法是将长度存储在变量中,并在条件中使用
int temp = route.length()-1;
while(i<temp){
int temp=route.length()-1;
而(i添加检查字符串大小以捕获错误:
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++;
}
String route=“ABCDE”;
int i=0;
而(i
因此,每当i计数器几乎接近字符串大小时,获取最后一个字符。添加字符串大小检查以捕获错误:
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++;
}
String route=“ABCDE”;
int i=0;
而(i
因此,每当i计数器几乎接近字符串大小时,获取最后一个字符。您不能使用
i
,因为当i=5
时,String sub=route.substring(i,i+2);
i+2=7
超出了索引范围,所以使用i您不能使用
i
,因为当i=5
,String sub=route.substring(i,i+2);
的i+2=7
超出索引,所以使用i,正如denis已经指出的,代码中的错误处于循环状态
while(i < route.length()-1)
应该是:while(i
.但是,如何简化此逻辑以使用for
循环
String route = "ABCDE";
for (int i=0; i+2<=route.length(); i++)
System.out.println(route.substring(i,i+2));
String route=“ABCDE”;
对于(inti=0;i+2,正如denis已经指出的,代码中的bug处于循环状态
while(i < route.length()-1)
应该是:while(i
.但是,如何简化此逻辑以使用for
循环
String route = "ABCDE";
for (int i=0; i+2<=route.length(); i++)
System.out.println(route.substring(i,i+2));
String route=“ABCDE”;
对于(int i=0;i+2您将获得一个,因为您试图访问不存在的字符串的索引
要解决此问题,请将循环条件从
while(i < route.length())
这种情况下的for
循环更短,因为声明、条件和增量语句都在一行中
1:此7
减少为6
,因为子字符串的endIndex
是独占的。您将获得一个,因为您试图访问不存在的字符串的索引
要解决此问题,请将循环条件从
while(i < route.length())
这种情况下的for
循环更短,因为声明、条件和增量语句都在一行中
1:这7
减少到6
,因为子字符串的endIndex
是独占的。这应该可以正常工作
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);
}
String route=“ABCDE”;
if(route.length()>2){
int i=0;
做{
String res=路由子串(i,i+2);
系统输出打印项次(res);
i++;
}而(i+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);
}
String route=“ABCDE”;
if(route.length()>2){
int i=0;
做{
String res=路由子串(i,i+2);
系统输出打印项次(res);
i++;
}而(i+1
编辑:为长度小于2的字符串添加了边界大小写仔细查看i+2,并用字符串“ABCDE”手动运行代码.当你接近字符串的末尾时,会发生什么奇怪的事情吗?你需要迭代直到长度为-1。我的意思是,直到长度小于I时,仔细查看你的I+2,并用字符串“ABCDE”手动运行代码。当你接近字符串的末尾时,会发生什么奇怪的事情吗?你需要迭代直到长度为-1。我的意思是直到I小于I为止。我忘了javaendIndex
是独占的。更新为使用感谢你指出这一点。我忘了javaendIndex
是独占的。更新为使用<代码>谢谢,我是stackoverflow的新手~现在我知道如何