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

Java字符串分割:如何分割时保留负数的负号?

解决Java字符串分割时保留负号的问题

要实现将字符串"5*5--5"分割为[5*5, -5],核心是区分作为分隔符的'-'和作为负号的'-',以下是几种可行方案:

方案1:使用正则表达式的正向前瞻分割

利用正向前瞻(?![0-9])匹配那些后面不是数字的'-',这类'-'作为分隔符,而后面紧跟数字的'-'会被保留为负号:

import java.util.Arrays;

public class SplitExample {
    public static void main(String[] args) {
        String str = "5*5--5";
        String[] result = str.split("-(?![0-9])");
        System.out.println(Arrays.toString(result)); // 输出: [5*5, -5]
    }
}

这个正则的逻辑是:只分割那些后面不紧跟数字的'-',因此连续两个'-'中的第一个会被当作分隔符,第二个因为后面是数字,会和数字一起保留。

方案2:使用正则匹配提取目标片段

如果需要更灵活的匹配(比如处理复杂的混合场景),可以用Pattern和Matcher直接提取符合要求的片段——要么是不含'-'的普通内容,要么是带负号的数字部分:

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

public class SplitExample {
    public static void main(String[] args) {
        String str = "5*5--5";
        Pattern pattern = Pattern.compile("[^-]+|-\\d+");
        Matcher matcher = pattern.matcher(str);
        List<String> result = new ArrayList<>();
        while (matcher.find()) {
            result.add(matcher.group());
        }
        System.out.println(result); // 输出: [5*5, -5]
    }
}

这种方法可以处理更复杂的字符串,比如"a-b--c-d--123"会被分割为[a, b, -c, d, -123],完全符合保留负号的需求。

注意事项

如果字符串开头存在'-'(比如"-5*5--3"),方案1会得到包含空字符串的结果["", "5*5", "-3"],可以通过过滤空元素解决:

String[] temp = str.split("-(?![0-9])");
List<String> filtered = new ArrayList<>();
for (String s : temp) {
    if (!s.isEmpty()) {
        filtered.add(s);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:54:36