0

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

例子:

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

您是否应该只检查字符串的长度并查看它是否在其中?

4

5 回答 5

1
string.charAt(i+1) == '#'

是的,我认为您需要确保i+1不大于字符串长度。

例子:

if( (i+1) < string.length() && (i-1) >= 0 && (yourcode))
   { 
   }
于 2013-01-11T16:56:15.573 回答
1

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

if(myString.length() - 1 > i)
于 2013-01-11T16:58:12.840 回答
1

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

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

编辑:在考虑了这段代码所涉及的所有情况之后,我不一定会以这种方式这样做,而是找到一种更简洁的方式来准确表达我想要完成的事情

于 2013-01-11T17:05:44.210 回答
1

最简单的方法是像这样更改for循环:

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

解释:

string.charAt(i - 1)意味着您可能会读取i-1字符串的位置。由于 0 是最低有效值,您可以使用以下命令开始迭代i = 1

string.charAt(i + 1)意味着您可能会读取i+1字符串的位置。因为string.length() - 1是您需要在 结束迭代的最高有效值i == string.length() - 2。由于 for 循环在进入循环之前检查条件,使用i < string.length() - 1将是正确的。

于 2013-01-11T17:18:08.903 回答
1

我会尝试使用此代码。

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') 
    {    
    }
}
于 2013-01-11T17:20:04.247 回答