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

Java StringBuilder替换首个星号的方法咨询及实现异常排查

问题分析
  • 你的需求是将每一组连续*的第一个替换为空格,其余*保留,现有代码逻辑是遍历所有字符,只要遇到*就统一替换为空格,所以输入末尾的两个连续*会被替换为两个空格,和预期不符。
  • 代码中添加的continue没有实际作用:if代码块执行完后本身没有其他逻辑,加continue和不加效果完全一致,无法实现“跳过后续连续*不替换”的效果。
解决方法

你可以新增一个标记位记录上一个字符是否为*,仅替换连续*中的第一个,其余连续的*保留即可,修改后的可运行代码如下:

public class Remove_asterisk {
    public static StringBuilder replace_ast(StringBuilder sb)
    {
        // 标记上一个字符是否为*
        boolean lastIsAsterisk = false;
        for(int i=0;i<sb.length();i++)
        {
            if(sb.charAt(i)=='*')
            {
                if(!lastIsAsterisk) {
                    // 是连续*的第一个,替换为空格
                    sb.setCharAt(i,' ');
                    lastIsAsterisk = true;
                }
                // 非第一个连续*,不修改直接保留
            } else {
                // 不是*,重置标记
                lastIsAsterisk = false;
            }
        }
        return sb;
    }

    public static void main(String[] args)
    {
        String s="!!*EDOC*Ot*EMOCLEw**.";
        StringBuilder sb=new StringBuilder();
        sb.append(s);
        sb=Remove_asterisk.replace_ast(sb);
        System.out.println("value of string : "+sb);
    }
}
运行结果

运行上述代码输出为:
value of string : !! EDOC Ot EMOCLEw *.
和预期结果一致(你提到的预期输出中的EODC为输入笔误,以实际输入的EDOC为准即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 15:45:00