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

Java字符串拆分遇+报NullPointerException问题求助

问题原因与解决方案

嗨,这个问题我太熟悉啦!你遇到的问题核心在于**String.split()方法的参数是正则表达式**,而+是正则语法里的特殊元字符——它的作用是匹配前面的字符/表达式一次或多次,不是你以为的普通加号。

当你直接写string.split("+")时,Java会把它当成正则表达式解析,这时候+前面没有任何可匹配的前置元素,属于无效的正则语法,导致split()执行失败,返回的数组要么是空的,要么直接抛出语法异常,后续访问parts[0]自然就触发了NullPointerException(或者数组越界异常,具体取决于JVM表现)。

而你用-的时候没问题,是因为-在正则里不属于特殊元字符(除非它出现在字符组[]里表示范围),所以直接作为普通分隔符处理就可以正常拆分。

修正方案

有两种简单的方法解决这个问题:

1. 用双反斜杠转义加号

在Java字符串里,反斜杠\本身需要转义,所以要用\\来表示正则里的单个转义符,这样\\+就会被解析成普通的加号:

String string = "Strg+Q";
String[] parts = string.split("\\+");
String part1 = parts[0]; // Strg
String part2 = parts[1]; // Q

2. 用Pattern.quote()包裹分隔符

如果你不确定分隔符是不是正则特殊字符,或者想更直观地处理任意字符串分隔符,可以用Pattern.quote()方法把目标字符串转成正则里的字面量:

import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        String string = "Strg+Q";
        String[] parts = string.split(Pattern.quote("+"));
        String part1 = parts[0]; // Strg
        String part2 = parts[1]; // Q
    }
}

补充说明

正则里的特殊字符还有这些:. + * ? ^ $ ( ) [ ] { } | \,只要你的分隔符是其中之一,都需要用上面两种方法之一进行转义处理,避免出现类似的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:34:08