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。好的,谢谢,这是我已经得到的,我一定在其他地方得到了错误。啊,我知道我有一个>=而不是一个>@保罗:很高兴你发现了。祝你好运