为什么不是这个基本的Java程序工作?
目标是让它计算给定字符串中“xx”的数量。我们会说重叠是允许的,所以“xxx”包含2“xx”。为什么不是这个基本的Java程序工作?
见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;
}
不要使用==来比较字符串;使用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)
访问的字符。
.equals()仍然不起作用 – user1399888 2013-05-03 21:52:34
仍然存在滥用'substring'从字符串中提取字符的问题。 – rgettman 2013-05-03 21:53:57
而我
使用字符串的“等于”方法==代替:
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;
}
这只能部分解决问题。 – 2013-05-03 21:53:03
的substring
方法的一个参数就不会在该位置得到的只是这个角色,它通过得到的一切从该位置到字符串的结尾。使用charAt
获取该位置的字符,并将其与==
与字符文字'x'
进行比较,而不是与String
"x"
进行比较。
理由三:
- 子()返回整个字符串(所以从“我”到字符串的结尾开始,而不是只有一个字母)。
- 比较.equals(),而不是==
- “我” 应该结束在str.length() - 1
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;
}
不要索引字符使用字符串。
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;
}
这是首发者常见的错误。小心。 – Lion 2013-05-03 21:51:47
虽然将字符串值与'=='进行比较是错误的,但这个问题更多的是关于'substring'错误地提取字符的问题。 – rgettman 2013-05-03 21:52:48
我已投票重新提出这个问题;它不是任何常见的“==”与“等于”字符串比较问题的重复。 – rgettman 2013-05-03 21:59:58