目标是让它计算给定字符串中“xx”的数量。我们会说允许重叠,所以“xxx”包含2“xx”。
参见http://codingbat.com/prob/p194667 我似乎无法弄清楚为什么它不起作用
int countXX(String str) {
int f = 0;
for (int i = 0; i < str.length(); i++){
if (!str.substring(i+1).isEmpty()){
if (str.substring(i) == "x" && str.substring (i+1) == "x") {
f++;
}
}
}
return f;
}
答案 0 :(得分:4)
不要使用==来比较字符串;使用equals()。
int countXX(String str) {
int f = 0;
for (int i = 0; i < str.length(); i++) {
if (!str.substring(i+1).isEmpty()) {
if (str.substring(i).equals("x") && str.substring(i+1).equals("x")) {
f++;
}
}
}
return f;
}
我认为当i
等于字符串长度减1并且您尝试访问(i+1)
处的字符时,此代码仍会出现问题。
答案 1 :(得分:4)
带有一个参数的substring
方法不会只获得该位置的那个字符,它会获取从该位置到字符串末尾的所有内容。使用charAt
获取该位置的角色,并将其与==
与字符文字'x'
进行比较,而不是与String
"x"
进行比较。
答案 2 :(得分:4)
不要使用子字符串来索引字符。
int countXX(String str) {
int f = 0;
for (int i = 0; i < str.length()-1; i++) {
if( str.charAt(i) == 'x' && str.charAt(i+1) == 'x' ) {
f++;
}
}
return f;
}
答案 3 :(得分:2)
三个原因:
答案 4 :(得分:1)
使用字符串'equals'而不是==:
int countXX(String str) {
int f = 0;
for (int i = 0; i < str.length(); i++){
if (!str.substring(i+1).isEmpty()){
if (str.substring(i).equals("x") && str.substring (i+1).equals("x")) {
f++;}}}
return f;
}
答案 5 :(得分:0)
int countXX(String str) {
int f = 0;
for (int i = 0; i < str.length() - 1; i++){
if (str.substring(i, i + 2).equals("xx")) {
f++;
}
}
return f;
}