簡體   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