You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:15:05