首页 > 解决方案 > 哪个 StringBuilder 函数可用于将每个第一个 * 替换为另一个字符?

问题描述

我曾经使用 continue 跳过下一次迭代,但它不起作用,

代码片段:

public static StringBuilder replace_ast(StringBuilder sb)
{
    for(int i=0;i<sb.length();i++)
    {
        if(sb.charAt(i)=='*')
        {
            sb.setCharAt(i,' ');
            continue;
        }
    }
    return sb;
}

main()
{
    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);
}

标签: javastringstringbuilder

解决方案


StringBuilder 部分是否相关?这似乎是一大堆不必要的复制到没有您想要的 API 的数据类型。

(另外,在我们的 java 中writeVariablesLikeThisnot_like_this如果您需要帮助/编写其他人可以阅读的代码,请遵循约定)。

String s = "!!*EDOC*Ot*EMOCLEw**.";
System.out.println(s);
System.out.println(replaceAst(s));
String t = "****";
System.out.println(t);
System.out.println(replaceAst(t));


static String replaceAst(String s) {
    return s.replaceAll("\\*(\\**)", " $1");
}

似乎正在工作:

!!*EDOC*Ot*EMOCLEw**.
!! EDOC Ot EMOCLEw *.
****
 ***

replaceAll 的那些参数是正则表达式。\\*是“明星角色”的正则表达式。()是正则表达式:“记住你在这些中匹配的内容,让我用 $1 重新引用它”。只是*“其中许多是 0”。(因此,\\**对于 0 到多个星号字符是正则表达式)。换句话说,该正则表达式表示:1 颗星,然后是任意数量的其他星,让我将额外的星称为 1 美元。

然后我们用空格+那些额外的星星(如果有的话)替换那个构造。结果正是你所要求的。


推荐阅读