Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将字符串分隔为两个字符的子字符串_Java_String - Fatal编程技术网

Java 如何将字符串分隔为两个字符的子字符串

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

我试图在两个字符的子字符串中拆分字符串,例如输入:“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++;
        }
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为止。我忘了java
endIndex
是独占的。更新为使用
感谢你指出这一点。我忘了java
endIndex
是独占的。更新为使用<代码>谢谢,我是stackoverflow的新手~现在我知道如何