在Kotlin中从Jsoup输出的字符串提取独立整数
解决从Jsoup输出的HTML中提取独立章节号的问题
我来帮你搞定这个问题!你遇到的数字连在一起的情况,大概率是因为没有针对每个章节条目单独处理,或者正则匹配的范围太广。咱们优先用Jsoup来处理,因为它能精准解析HTML结构,避免字符串处理的脆弱性:
方法一:用Jsoup解析+正则精准匹配
先把你输出的HTML字符串(注意去掉首尾的[],那应该是打印时额外加的)交给Jsoup解析,定位到每个<li>元素,再提取里面的章节文本,最后用正则匹配出目标数字。这种方法最可靠,哪怕HTML结构小范围变化也能适配。
示例Java代码:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ChapterNumberExtractor { public static void main(String[] args) { // 你的原始HTML内容(去掉了首尾的[]) String htmlContent = "<ul> <li><span></span><a rel=\"nofollow\"><span>Afterword</span></a></li> <li><span></span><a rel=\"nofollow\"><span>MW, Chapter, 2255</span></a></li> <li><span></span><a rel=\"nofollow\"><span>MW, Chapter, 2254</span></a></li> <li><span></span><a rel=\"nofollow\"><span>MW, Chapter, 2253</span></a></li> <li><span></span><a rel=\"nofollow\"><span>MW, Chapter, 2252</span></a></li> </ul>"; // 解析HTML文档 Document doc = Jsoup.parse(htmlContent); // 获取所有<li>元素 Elements chapterItems = doc.select("li"); // 定义正则:匹配"Chapter, "后面的连续数字,精准定位章节号 Pattern chapterPattern = Pattern.compile("Chapter, (\\d+)"); for (Element item : chapterItems) { // 获取每个<li>里最后一个<span>的文本内容 String itemText = item.select("span:last-child").text(); Matcher matcher = chapterPattern.matcher(itemText); // 如果匹配到,提取并输出章节号 if (matcher.find()) { String chapterNum = matcher.group(1); System.out.println(chapterNum); } // 像"Afterword"这类没有章节号的条目会自动跳过 } } }
方法二:纯字符串分割+正则(应急方案)
如果暂时不想引入Jsoup,也可以用字符串分割先拆分每个条目,再提取数字。但这种方法依赖HTML的固定格式,结构变化容易失效:
示例代码:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringBasedExtractor { public static void main(String[] args) { String htmlContent = "<ul> <li><span></span><a rel=\"nofollow\"><span>Afterword</span></a></li> <li><span></span><a rel=\"nofollow\"><span>MW, Chapter, 2255</span></a></li> <li><span></span><a rel=\"nofollow\"><span>MW, Chapter, 2254</span></a></li> <li><span></span><a rel=\"nofollow\"><span>MW, Chapter, 2253</span></a></li> <li><span></span><a rel=\"nofollow\"><span>MW, Chapter, 2252</span></a></li> </ul>"; // 按"</li>"分割成单个条目 String[] items = htmlContent.split("</li>"); // 匹配独立的4位数字(也可以用\\d+匹配任意长度数字) Pattern numPattern = Pattern.compile("\\b\\d{4}\\b"); for (String item : items) { Matcher matcher = numPattern.matcher(item); if (matcher.find()) { System.out.println(matcher.group()); } } } }
两种方法都能帮你提取出独立的2255、2254这类章节号,不会出现数字连在一起的问题。优先推荐Jsoup的方案,稳定性更强。
内容的提问来源于stack exchange,提问作者vipin
相关产品推荐
相关产品推荐

