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
相关产品推荐
相关产品推荐

