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

Java实现mal字符串屏蔽程序输入末尾含m时运行异常求助

问题根源

你的代码运行报错是数组下标越界导致的:
遍历字符数组时,循环终止条件设为了i < dizi.length,当i已经走到数组最后1位或倒数第2位时,后续访问dizi[i+1]、dizi[i+2]的操作已经超出了数组的有效下标范围,当输入内容以m结尾时,i走到最后一位刚好命中dizi[i] == 'm'的判断,触发后续的越界访问直接抛出异常。

修复方法

只需要调整循环的终止条件即可,因为要匹配连续3个字符,i的最大有效取值为数组长度-3,超出这个范围不可能凑出3个连续字符,不需要再遍历。
修改后的完整代码如下:

import java.util.Scanner;

public class mute 
{
    public static void main(String[] args) 
    {
        Scanner scan = new Scanner(System.in);
        String enteredmessage;

        System.out.print("Enter the message:");
        enteredmessage = scan.nextLine();

        char[] array = enteredmessage.toCharArray();
        mutecommand(array);
        
        scan.close();
    }
    public static void mutecommand(char[] dizi) {
        // 调整循环终止条件,避免越界
        for (int i = 0; i <= dizi.length - 3; i++) {
            if(dizi[i] == 'm' && dizi[i+1] == 'a' && dizi[i+2]=='l')
            {
                dizi[i]='*';
                dizi[i+1]='*';
                dizi[i+2]='*';
            }
        }

        for (char a : dizi) {
            System.out.print(a);
        }
    }
}
优化提示

如果需要匹配多个重叠的mal组合(极端场景如mmal),也可以在匹配到mal后让i直接跳过2位,避免重复判断已经替换为*的字符,提升执行效率。

内容的提问来源于stack exchange,提问作者TarikTEM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:45:01