如何使用replaceAll实现批量替换?仅H1格式替换生效问题求助
问题解决:Markdown标题替换失效问题
问题原因
你的代码存在两个核心错误:
- 第一次替换使用
replace()方法,该方法仅支持普通字符串匹配,不支持正则表达式,所以# (.+)只会被当作字面量查找,实际h1替换并未真正生效; - 第二次替换直接基于原始的
getText变量操作,而非第一次替换后的replace变量,导致前一次替换结果被完全覆盖。
修正后的代码
private String getText; public String Test(EditText edittext) { getText = edittext.getText().toString(); // 优先替换h2,避免h1正则匹配到##开头的内容 String replace = getText.replaceAll("##(.+)", "<h2>$1</h2>"); // 再替换h1,使用replaceAll支持正则表达式 replace = replace.replaceAll("#(.+)", "<h1>$1</h1>"); return replace; }
额外说明
- 正则执行顺序很重要:必须先替换
##开头的h2,否则#(.+)会匹配到##text中的第一个#,将#text部分替换为h1,剩余的单个#无法被正确处理; - 如果你的需求是
# text(#后带空格),请将正则调整为## (.+)和# (.+),确保和需求格式一致; - 处理正则替换必须使用
replaceAll()方法,replace()仅适用于普通字符串的替换场景。
内容的提问来源于stack exchange,提问作者León Sivana Gutiérrez
相关产品推荐
相关产品推荐

