Java 拆分字符串,保留一些分隔符,但删除另一个分隔符

Java 拆分字符串,保留一些分隔符,但删除另一个分隔符,java,regex,Java,Regex,基本上,我希望将字符串拆分为由空格和运算符分隔的数组,但在删除空格的同时保留运算符 例如3529+-23*/ 将是[3][52][9][+][-][2][3][*][/]拆分时需要的逻辑是使用空格分隔符,而不是使用算术符号分隔符。为此,我们可以使用前瞻按符号拆分,使用普通的\\s按空格拆分,并将其从结果中删除 String input = "3 52 9+- 2 3 * /"; input = input.replaceAll("([\\+\\-*/])(.)", " $1$2")

基本上,我希望将字符串拆分为由空格和运算符分隔的数组,但在删除空格的同时保留运算符

例如
3529+-23*/


将是
[3][52][9][+][-][2][3][*][/]

拆分时需要的逻辑是使用空格分隔符,而不是使用算术符号分隔符。为此,我们可以使用前瞻按符号拆分,使用普通的
\\s
按空格拆分,并将其从结果中删除

String input = "3 52 9+- 2 3 * /";
input = input.replaceAll("([\\+\\-*/])(.)", " $1$2")
             .replaceAll("\\s+", " ");

String[] parts = input.split("(?<=[\+\-*/])|\\s")

System.out.println(Arrays.toString(parts));
试试这个正则表达式:

([\-]?[^\s\+\-\*\/]+|[\+\-\*\/])
它将选择:

[\-]?
已签名或未签名

[^\s\+\-\*\/]
既不是空格也不是[+-*/]的字符

[\+-\*\/]
[+-*/]


与您的情况相符。

在被否决后,我意识到您可能有任意数量的运算符。正则表达式可能不是最好的工具。是的,我会的。你建议我怎么做?我在下面恢复了我的答案。它并没有给出您想要的确切输出,但它很接近。我只需要删除所有有空间的元素,然后。。。谢谢哇谢谢!是的,这对我来说是相当令人困惑的东西。这看起来很像我的答案,而且你的数字在结尾附加了额外的空格。是的,我已经更新了你的答案,你的代码中有一个错误,我需要解决它并回答它
import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        String input = "3 52 9+- 2 3 * /";
        input = input.replaceAll("([\\+\\-*/])", " $1 ").replaceAll("\\s+", " ");
        String[] parts = input.split("(?<=[+\\-*/ ])");
        List<String> finalList = new ArrayList<String>();
        for(String part : parts) {
            if(part.trim().length() > 0) {
                finalList.add(part);
            }
        }
        System.out.println(finalList);
    }
}
import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        String input = "3 52 9+- 2 3 * /";
        input = input.replaceAll("([\\+\\-*/])", " $1 ").replaceAll("\\s+", " ");
        String[] parts = input.split("(?<=[+\\-*/ ])");
        List<String> finalList = new ArrayList<String>();
        for(String part : parts) {
            if(part.trim().length() > 0) {
                finalList.add(part);
            }
        }
        System.out.println(finalList);
    }
}
[3 , 52 , 9 , +, -, 2 , 3 , *, /]