[英]String index out of bounds in Jjava
檢查字符串索引是否在范圍內的最佳方法是什么? 假設我們正在檢查索引i-1
或i+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.