Java 如何在不删除拆分字符的情况下拆分字符串

Java 如何在不删除拆分字符的情况下拆分字符串,java,arrays,string,split,substring,Java,Arrays,String,Split,Substring,我想将字符串拆分为多个部分,但拆分字符串时不应删除字符 在我的示例中,我希望输出: parts[0]= 4x parts[1]= -3y parts[2]= 6z parts[3]= 3v 这是我的代码: import java.util.Arrays; public class Polynomaddition { public static void main(String[] args) { String fraction = "4x-3y+6z+3v"; String

我想将
字符串
拆分为多个部分,但拆分字符串时不应删除字符

在我的示例中,我希望输出:

parts[0]= 4x
parts[1]= -3y
parts[2]= 6z
parts[3]= 3v
这是我的代码:

import java.util.Arrays;

public class Polynomaddition {

public static void main(String[] args) {
    String fraction = "4x-3y+6z+3v";
    String [] parts = fraction.split("(?<=\\[a-z]");
    System.out.println(Arrays.toString(parts));
    //String result = calculator(fraction);
}

public static String calculator(String s) {
    String result = "";
     String [] parts = s.split("(?<=[a-z])", -1);

    return result;
    }
}
导入java.util.array;
公共类多项式加和{
公共静态void main(字符串[]args){
字符串分数=“4x-3y+6z+3v”;
字符串[]部分=分数。拆分(“(?解决方案1
在您的情况下,似乎需要这个正则表达式
\+|(?=-)

细节

  • 分裂
  • \+
    加号
  • |
  • (?=-)
    减去而不删除它

解决方案2 或者使用正则表达式,但需要检查每个结果,例如:

String[] parts = Arrays.stream(fraction.split("(?<=[a-z])"))
        .map(s -> s.startsWith("+") ? s.substring(1, s.length()) : s)
        .toArray(String[]::new);

我根本不会使用
split
。相反,请使用与实际多项式项匹配的模式,并使用匹配器(特别是其方法)来提取每个匹配项:

List<String> parts = new ArrayList<>();

Matcher termMatcher = Pattern.compile("[-+]?\\d+[a-z]").matcher(fraction);
while (termMatcher.find()) {
    String part = termMatcher.group();
    if (part.startsWith("+")) {
        part = part.substring(1);
    }
    parts.add(part);
}

System.out.println(parts);
List parts=new ArrayList();
Matcher termMatcher=Pattern.compile(“[-+]”?\\d+[a-z]”)。Matcher(分数);
while(termMatcher.find()){
字符串部分=termMatcher.group();
if(带(“+”)的部分开始){
部分=部分子串(1);
}
部分。添加(部分);
}
系统输出打印LN(部件);
”(?
[4x, -3y, 6z, 3v]
List<String> parts = new ArrayList<>();

Matcher termMatcher = Pattern.compile("[-+]?\\d+[a-z]").matcher(fraction);
while (termMatcher.find()) {
    String part = termMatcher.group();
    if (part.startsWith("+")) {
        part = part.substring(1);
    }
    parts.add(part);
}

System.out.println(parts);