有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用于拆分数值表达式的java正则表达式

我需要拆分数值表达式。基础很简单,但是。。。我试过了

public static void main(String[] args) {
    String [] a = {"1+1", "1-1", "22*43", "25/17", "-3 * -3"};
    String [] z;
    for(int i = 0; i < a.length; i++){
        z = a[i].split("[\\D]");
        System.out.println(i + ":  " + a[i] + "  |" + z[0] + "|  " + "|" + z[1] + "|");
    }
}

我得到:

0:  1+1  |1|  |1|
1:  1-1  |1|  |1|
2:  22*43  |22|  |43|
3:  25/17  |25|  |17|
4:  -3 * -3  ||  |3|

问题是第4行:应该是:

4:  -3 * -3  |-3|  |-3|

有没有可能通过增强正则表达式来实现这一点


共 (3) 个答案

  1. # 2 楼答案

    这一条应该适合你的需要,只要你不串联表达式:

    "(?<=\\d)\\s*\\D\\s*(?=\\d|-)"
    
  2. # 3 楼答案

    试试这个:

        public static void main(String[] args) {
            String[] a = {"1+1", "1-1", "22*43", "25/17", "-3 * -3"};
            for (int i = 0; i < a.length; i++) {
                String s = a[i].replaceAll(" ", "");
                String z2 = s.replaceAll("(.*[\\d])([\\D])(.*)", "|$1|"+"|$3|");
                System.out.println(z2);
            }
        }
    

    如果要使用递归来支持所有长度的表达式,请执行以下操作:

    static Pattern p; //declare this member in the class
    
    public static void main(String[] args) {
        p = Pattern.compile("(.*[\\d])([\\D])(.*)");
        String[] a = { "1+1", "1-1", "22*43", "25/17", "-3 * -3 - -4" };
        for (int i = 0; i < a.length; i++) {
            String s = a[i].replaceAll(" ", "");
            split(s);
            System.out.println("\n");
        }
    }
    
    static void split(String s) {
        Matcher m = p.matcher(s);
        if (!m.matches())
            return;
        else {
            for (int i = 1; i <= 3; i += 2) {
                if (m.group(i).length() < 3) {
                    System.out.print(" |" + m.group(i) + "| ");
                } else
                    split(m.group(i));
            }
        }
    }