如何检查字符串中是否存在某个字符?
How to check if a certain character is present in the String?
我写了下面的代码来在下面的字符串中找到关键字 co_e
,其中 _
代表任何其他字符。
如果我将字符串更改为 "aaacodebbb"
或 "codexxcode"
效果很好
但是如果我将它更改为 "xxcozeyycop"
它会抛出 StringIndexOutOfBoundsException
public int countCode(String str) {
int count = 0;
String result = "";
boolean yes = true;
for (int i = 0; i < str.length(); i++) {
// yes = str.charAt(i+3);
if (str.length() >= 3) {
if (str.charAt(i) == 'c' && str.charAt(i + 1) == 'o' && str.charAt(i + 3) == 'e')
count++;
}
}
return (count);
}
在循环中,您正在检查访问 i+3。因此,当 i
位于倒数第 4 个位置时,您必须停止。
将if(str.length()>= 3)
替换为if(str.length()>= 3 && str.length() - i >3)
或
您可以将以下内容作为 for 循环中的第一个条件:
if(str.length() - i <=3){
break;
}
您的越界错误发生在这一行:
if (str.charAt(i) == 'c' && str.charAt(i + 1) == 'o' && str.charAt(i + 3) == 'e')
错误发生在str.charAt(8)
for str = "xxcozeyycop"
,因为str.length()
是11,而str.charAt(11)
明显越界(所以都是str.charAt(str.length())
)
这是一种可能的解决方案。请注意,如果 str.length() < 4
,则 for 循环不能 运行,因为 i + 3
将始终越界。此外,当 i == str.length() - 4
用于所有长度超过四个字符的字符串时,i+3
将等于字符串的最后一个索引 str.length() - 1
.
for (int i = 0; i < str.length() - 3; i++) {
char c1 = str.charAt(i);
char c2 = str.charAt(i + 1);
char c4 = str.charAt(i + 3);
if (c1 == 'c' && c2 == 'o' && c4 == 'e')
count++;
}
我写了下面的代码来在下面的字符串中找到关键字 co_e
,其中 _
代表任何其他字符。
如果我将字符串更改为 "aaacodebbb"
或 "codexxcode"
效果很好
但是如果我将它更改为 "xxcozeyycop"
它会抛出 StringIndexOutOfBoundsException
public int countCode(String str) {
int count = 0;
String result = "";
boolean yes = true;
for (int i = 0; i < str.length(); i++) {
// yes = str.charAt(i+3);
if (str.length() >= 3) {
if (str.charAt(i) == 'c' && str.charAt(i + 1) == 'o' && str.charAt(i + 3) == 'e')
count++;
}
}
return (count);
}
在循环中,您正在检查访问 i+3。因此,当 i
位于倒数第 4 个位置时,您必须停止。
将if(str.length()>= 3)
替换为if(str.length()>= 3 && str.length() - i >3)
或
您可以将以下内容作为 for 循环中的第一个条件:
if(str.length() - i <=3){
break;
}
您的越界错误发生在这一行:
if (str.charAt(i) == 'c' && str.charAt(i + 1) == 'o' && str.charAt(i + 3) == 'e')
错误发生在str.charAt(8)
for str = "xxcozeyycop"
,因为str.length()
是11,而str.charAt(11)
明显越界(所以都是str.charAt(str.length())
)
这是一种可能的解决方案。请注意,如果 str.length() < 4
,则 for 循环不能 运行,因为 i + 3
将始终越界。此外,当 i == str.length() - 4
用于所有长度超过四个字符的字符串时,i+3
将等于字符串的最后一个索引 str.length() - 1
.
for (int i = 0; i < str.length() - 3; i++) {
char c1 = str.charAt(i);
char c2 = str.charAt(i + 1);
char c4 = str.charAt(i + 3);
if (c1 == 'c' && c2 == 'o' && c4 == 'e')
count++;
}