You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:38:14