Jjava中的字符串索引越界

Jjava中的字符串索引越界,java,string,indexing,indexoutofboundsexception,Java,String,Indexing,Indexoutofboundsexception,检查字符串索引是否在边界内的最佳方法是什么?假设我们正在检查一个字符串的索引i-1或i+1,因为您不能说!=空 例如: for (int i = 0; i < string.length(); i++) { if (string.charAt(i+1) == '#' && string.charAt(i - 1) != '1') { } } if( (i+1) < string.length() && (i-1)

检查字符串索引是否在边界内的最佳方法是什么?假设我们正在检查一个字符串的索引
i-1
i+1
,因为您不能说!=空

例如:

for (int i = 0; i < string.length(); i++) 
{
    if (string.charAt(i+1) == '#' && string.charAt(i - 1) != '1') 
    {    
    }
}
if( (i+1) < string.length() && (i-1) >= 0 && (yourcode))
   { 
   }
for(int i=0;i
你应该检查字符串的长度,看看它是否在里面吗

string.charAt(i+1) == '#'
是的,我认为您需要确保
I+1
不大于字符串长度

例如:

for (int i = 0; i < string.length(); i++) 
{
    if (string.charAt(i+1) == '#' && string.charAt(i - 1) != '1') 
    {    
    }
}
if( (i+1) < string.length() && (i-1) >= 0 && (yourcode))
   { 
   }
if((i+1)=0&&(yourcode))
{ 
}
是的,我认为您需要确保
I+1
不大于字符串长度

例如:

for (int i = 0; i < string.length(); i++) 
{
    if (string.charAt(i+1) == '#' && string.charAt(i - 1) != '1') 
    {    
    }
}
if( (i+1) < string.length() && (i-1) >= 0 && (yourcode))
   { 
   }
if((i+1)=0&&(yourcode))
{ 
}

为什么不检查字符串的长度

if(myString.length() - 1 > i)

为什么不检查一下绳子的长度呢

if(myString.length() - 1 > i)

在这些情况下,我总是修改循环的长度(和/或开始)。。。这些都是很好的答案——没有一种方法可以做到,但我会这样做:

for (int i = 1; i < string.length() - 1; i++) 
{
    if (string.charAt(i+1) == '#' && (i != 1 || string.charAt(i - 1) != '1'))
    {    
    }
}
for(int i=1;i

编辑:在考虑了这段代码所涉及的所有情况后,我不一定会这样做,但我会找到一种更简洁的方式来准确地表达我试图实现的目标

在这些情况下,我总是修改循环的长度(和/或开始)。。。这些都是很好的答案——没有一种方法可以做到,但我会这样做:

for (int i = 1; i < string.length() - 1; i++) 
{
    if (string.charAt(i+1) == '#' && (i != 1 || string.charAt(i - 1) != '1'))
    {    
    }
}
for(int i=1;i

编辑:在考虑了这段代码所涉及的所有情况后,我不一定会这样做,但我会找到一种更简洁的方式来准确地表达我要完成的任务。最简单的方法是更改
for
循环,如下所示:

for (int i = 1; i < string.length() - 1; i++) 
{
    if (string.charAt(i+1) == '#' && string.charAt(i - 1) != '1') 
    {    
    }
}
for(int i=1;i
说明:

string.charAt(i-1)
表示可以读取字符串的位置
i-1
。由于0是最低有效值,因此可以使用
i=1


string.charAt(i+1)
表示可以读取字符串的位置
i+1
。由于
string.length()-1
是在
i==string.length()-2
处结束迭代所需的最高有效值。因为for循环在进入循环之前会使用
i
检查条件。最简单的方法是如下更改
for
循环:

for (int i = 1; i < string.length() - 1; i++) 
{
    if (string.charAt(i+1) == '#' && string.charAt(i - 1) != '1') 
    {    
    }
}
for(int i=1;i
说明:

string.charAt(i-1)
表示可以读取字符串的位置
i-1
。由于0是最低有效值,因此可以使用
i=1


string.charAt(i+1)
表示可以读取字符串的位置
i+1
。由于
string.length()-1
是在
i==string.length()-2
处结束迭代所需的最高有效值。由于for循环在进入循环之前使用
i
检查条件,因此将正好合适。

我将尝试使用此代码

for (int i = 1; string!= null && string.length() >= 3 && i < string.length() - 1; i++) 
//it solve the case of String == null and string too short
//it optimize the max number of cycles
{
    if (string.charAt(i+1) == '#' && string.charAt(i - 1) != '1') 
    {    
    }
}
for(int i=1;string!=null&&string.length()>=3&&i
我会尝试使用此代码

for (int i = 1; string!= null && string.length() >= 3 && i < string.length() - 1; i++) 
//it solve the case of String == null and string too short
//it optimize the max number of cycles
{
    if (string.charAt(i+1) == '#' && string.charAt(i - 1) != '1') 
    {    
    }
}
for(int i=1;string!=null&&string.length()>=3&&i
我试过了,它给了我一个索引错误。这是对的。如果((i+1)=(string.length()-1)和&myCode)@Paul,我认为您需要添加否定检查,也可以作为jontro注释,否则对于第一个索引,i-1将是-1。好的,谢谢,这是我已经得到的,我一定在其他地方得到了错误。啊,我知道我有一个>=而不是一个>@保罗:很高兴你发现了。祝你好运。我试过了,它给了我一个索引错误。这是对的。如果((i+1)=(string.length()-1)和&myCode)@Paul,我认为您需要添加否定检查,也可以作为jontro注释,否则对于第一个索引,i-1将是-1。好的,谢谢,这是我已经得到的,我一定在其他地方得到了错误。啊,我知道我有一个>=而不是一个>@保罗:很高兴你发现了。祝你好运