Android Studio中Java字符串处理问题:无法移除HTML与lang头部
解决字符串处理中的HTML标签与语言标记移除问题
我来帮你分析问题并修正代码~你的核心需求是移除HTML标签和[lang="en"]/[/lang]标记,现在第二个判断不生效主要有两个关键原因:
问题原因拆解
matches()方法的误用:matches()会检查整个字符串是否完全匹配正则表达式,而你处理后的字符串是" [lang=\"en\"]The large ones[/lang] "(注意前后的空格),显然和\\[lang=\\\"en\\\"\\]不匹配,所以条件永远不会触发。- 未接收
substring()的返回值:substring()是返回一个新的字符串,不会修改原字符串,你需要把结果重新赋值给description才会生效。
修正后的代码方案
这里推荐两种简洁可靠的实现方式:
方案一:使用字符串替换(最直观)
直接用replaceAll()匹配并移除目标标记,同时处理HTML处理后可能产生的前后空格:
description = "<p>[lang=\"en\"]The large ones[/lang]</p>"; // 第一步:移除HTML标签(保留你的原有逻辑) if (description.startsWith("<p>")) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { description = Html.fromHtml(description, Html.FROM_HTML_MODE_COMPACT).toString(); } else { description = Html.fromHtml(description).toString(); } } // 第二步:移除[lang="en"]和[/lang]标记,并清理空格 description = description.trim() // 先去掉HTML处理后可能带的前后空格 .replaceAll("^\\[lang=\\\"en\\\"\\]", "") // 移除开头的语言标记 .replaceAll("\\[/lang\\]$", "") // 移除结尾的语言标记 .trim(); // 再次清理可能产生的空格
方案二:使用正则一次性提取内容(更高效)
如果字符串结构固定,也可以用正则直接提取[lang="en"]和[/lang]之间的核心内容:
description = "<p>[lang=\"en\"]The large ones[/lang]</p>"; // 第一步:移除HTML标签(保留原有逻辑) if (description.startsWith("<p>")) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { description = Html.fromHtml(description, Html.FROM_HTML_MODE_COMPACT).toString(); } else { description = Html.fromHtml(description).toString(); } } // 第二步:用正则提取中间的目标内容 Pattern pattern = Pattern.compile("\\[lang=\\\"en\\\"\\](.*?)\\[/lang\\]"); Matcher matcher = pattern.matcher(description.trim()); if (matcher.find()) { description = matcher.group(1).trim(); }
两种方案处理后,最终的description都会是"The large ones",完全符合你的预期需求。
内容的提问来源于stack exchange,提问作者mahmoud Mohamed
相关产品推荐
相关产品推荐

