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

Java中含{}、/、-的字符串分割报错,如何提取指定数字?

解决Java字符串分割时的PatternSyntaxException异常

问题根源

你遇到的PatternSyntaxException: Illegal repetition异常,本质原因是String.split()方法的参数是正则表达式,而你用来分割的字符串-{name-of-perpetrators里包含了{——这个字符在正则语法中是特殊元字符,用来指定重复次数(比如a{3}表示匹配3个a),直接使用会被解析成非法的正则语法,所以触发了异常。

解决方案1:转义正则特殊字符

你可以手动转义{和}(Java字符串里需要用\\来转义单个\),或者更省心的是用Pattern.quote()方法自动转义所有正则特殊字符,这样分割字符串会被当作普通文本处理。

修正后的代码:

import java.util.regex.Pattern;

public class TextSplit {
    public static void main(String[] args) {
        String current_url = "https://{domain name}/{type of data}/4583236-{name-of-perpetrators}";
        String[] urlParts = current_url.split("type of data}/");
        String mySuburl = urlParts[1];
        // 使用Pattern.quote()包裹分割字符串,自动转义所有正则特殊字符
        String[] suburl = mySuburl.split(Pattern.quote("-{name-of-perpetrators"));
        String mytext = suburl[0];
        System.out.println(mytext); // 输出4583236
    }
}

解决方案2:直接匹配提取数字(更可靠)

如果你的核心需求只是提取URL中的那段数字,用正则直接匹配连续数字段会更灵活,不用依赖固定的分割字符串,哪怕URL结构有小调整也能正常提取:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TextSplit {
    public static void main(String[] args) {
        String current_url = "https://{domain name}/{type of data}/4583236-{name-of-perpetrators}";
        // 匹配连续数字的正则表达式
        Pattern pattern = Pattern.compile("(\\d+)");
        Matcher matcher = pattern.matcher(current_url);
        if (matcher.find()) {
            String mytext = matcher.group(1);
            System.out.println(mytext); // 输出4583236
        }
    }
}

额外提示

以后使用String.split()时,只要分割字符串包含正则特殊字符(比如{、}、*、+、.等),都需要要么手动转义,要么用Pattern.quote()来避免语法异常。

内容的提问来源于stack exchange,提问作者undetected Selenium

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:19:05