繁体   English   中英

Jjava中的字符串索引超出范围

[英]String index out of bounds in Jjava

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

例:

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

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

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

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

例:

if( (i+1) < string.length() && (i-1) >= 0 && (yourcode))
   { 
   }

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

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循环:

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进入循环之前检查条件,所以i < string.length() - 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') 
    {    
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM