Java使用indexOf统计"ing"出现次数遇类型转换错误求助
解决"Integer cannot be converted to boolean"错误并正确统计"ing"出现次数
嘿,我来帮你搞定这个问题!首先咱们先搞清楚你遇到的错误根源:
错误原因
String.indexOf("ing")方法返回的是整数类型:如果找到"ing",就返回它第一次出现的起始索引;如果找不到,就返回-1。而Java的if条件要求必须是布尔值(true/false),你直接把整数丢进去,编译器当然会报错"Integer cannot be converted to boolean"啦。
另外,你的代码还有个小问题:就算条件改对了,也只能统计一次"ing"的出现,没法覆盖所有情况——毕竟indexOf默认只找第一个匹配的位置。
修正方案
我给你调整了代码,解决了这两个问题,还优化了一些细节:
package javaapplication3; import java.util.*; public class JavaApplication3 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s; String target = "ing"; int count = 0; System.out.println("Entrer une ligne de texte :"); // 用nextLine读取整行文本,代替next()(只会读到第一个空格) s = in.nextLine(); int index = s.indexOf(target); // 循环查找所有"ing"的出现位置 while (index != -1) { count++; // 从当前匹配位置的下一个字符开始继续查找,避免重复统计 index = s.indexOf(target, index + target.length()); } // 替换所有"ing"为"ed",即使没有匹配也会返回原字符串,不会出现null String q = s.replaceAll(target, "ed"); System.out.println("\"ing\" est occuree " + count + " fois."); System.out.println(q); in.close(); // 关闭Scanner,释放资源 } }
关键改动说明
- 替换
in.next()为in.nextLine():next()只会读取到第一个空格,用nextLine()才能获取用户输入的整行内容,比如用户输入"running jumping"也能正确处理。 - 用循环统计所有出现次数:通过
indexOf的重载方法(第二个参数指定起始查找位置),每次找到"ing"后,从它的下一个位置继续查找,直到返回-1(没有更多匹配),这样就能准确统计总次数。 - 优化
q的处理:直接用replaceAll,不管有没有找到"ing",都会返回有效的字符串,避免原代码中q为null导致的输出问题。 - 关闭Scanner:养成良好的资源管理习惯,避免潜在的资源泄漏。
内容的提问来源于stack exchange,提问作者Raphael Eid
相关产品推荐
相关产品推荐

