Java中如何按+、-操作符分割字符串?
Java分割含"+""-"的字符串提取项
要实现将类似"2x^3+3x-8"这样的字符串分割为['2x^3', '3x', '8'],可以用以下两种实用方法:
方法一:分割后过滤空元素
直接以+和-作为分隔符分割字符串,再过滤掉可能出现的空字符串(比如字符串以符号开头时会产生空元素):
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class SplitExample { public static void main(String[] args) { String str1 = "2x^3+3x-8"; // 分割字符串 String[] rawTerms = str1.split("[-+]"); // 方式1:循环过滤 List<String> result1 = new ArrayList<>(); for (String term : rawTerms) { if (!term.isEmpty()) { result1.add(term); } } System.out.println(result1); // 输出: [2x^3, 3x, 8] // 方式2:Stream流过滤 List<String> result2 = Arrays.stream(rawTerms) .filter(s -> !s.isEmpty()) .collect(Collectors.toList()); System.out.println(result2); // 输出: [2x^3, 3x, 8] } }
方法二:正则匹配提取项
通过正则表达式直接匹配所有非+、-的连续字符,提取每个项的内容:
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class MatchExample { public static void main(String[] args) { String str1 = "2x^3+3x-8"; // 匹配一个或多个非+、-的字符 Pattern pattern = Pattern.compile("[^+-]+"); Matcher matcher = pattern.matcher(str1); List<String> result = new ArrayList<>(); while (matcher.find()) { result.add(matcher.group()); } System.out.println(result); // 输出: [2x^3, 3x, 8] } }
两种方法都能满足需求:如果你的字符串大概率不会以符号开头,方法一更简洁;如果需要兼容开头带符号的场景,两种方法都能处理,方法二的逻辑更直观,直接提取目标内容。
内容的提问来源于stack exchange,提问作者joshxb2
相关产品推荐
相关产品推荐

