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

时间:2016-11-22 05:20:01

标签: java regex

基本上我想将一个字符串拆分成一个由空格和运算符分隔的数组,但在删除空格时保留运算符

离。 3 52 9+- 2 3 * /

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

3 个答案:

答案 0 :(得分:1)

分割时所需的逻辑是消耗分隔符,这些分隔符是空格,而不是消耗分隔符,这些分隔符是算术符号。为此,我们可以使用前瞻符号进行拆分,并使用普通\\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));

<强>输出:

[3, 52, 9, +,  -,  2, 3, *,  /]

答案 1 :(得分:0)

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 , *, /]

答案 2 :(得分:-1)

试试这个正则表达式:

([\-]?[^\s\+\-\*\/]+|[\+\-\*\/])

将选择:

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

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

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

只是符合您的情况。