2015-10-07 52 views
0

我想这个字符串分割:如何使用正则表达式分割此字符串?

5+(4/2)-4+1+(4%3)!=23+(3*5) 

到一个列表,使用regex

输出应该是:

[5 , + , (, 4 ,/, 2 ,) , - , 4 , + , 1 , + , (, 4 , % , 3 , != , 23 , + , (, 3 , * , 5 ,) ] 

注:我的问题恰恰是与not equal运营商,该regex不认为这是一个字符

+0

什么是你目前的正则表达式? –

+0

@BalwinderSingh(?<= [ - + * /%()])|(?= [ - + * /%()])\\ s * – safana

回答

4

做配套,而不是分裂。

List<String> list = new ArrayList<String>(); 
Matcher m = Pattern.compile("[^\\w()]?=|\\w+|\\W").matcher(s); 
while(m.find()) { 
    list.add(m.group()) 
} 
System.out.println(list); 

DEMO

+1

'“[^ \\ w()]?= | \ \ w + | \\ W“' –

+0

谢谢,它是真的 – safana

0

请试试这个

import java.util.ArrayList; 
import java.util.List; 


public class Test { 
    public static void main(String[] args) { 
    String s="5+(4/2)-4+1+(4%3)!=23+(3*5)"; 
    String s3 = ""; 
    char c = 0; 
    List a1 = new ArrayList(); 
    for(int i=0;i<s.length();i++) 
    { 
     char temp=c; 
     c=s.charAt(i); 
     String s1= Character.toString(c); 
     String s2= Character.toString(temp); 

     if((s1.equals("=") && s2.matches("!"))) 
     { 
      s1=s2+s1; 
      a1.add(s1); 
     } 
     else if(s1.matches("[0-9]+") ||(s1.equals("+") ||s1.equals("-") ||s1.equals("*") ||s1.equals("/") ||s1.equals("%")||s1.equals("(")||s1.equals(")"))) 
     { 

       if(s1.matches("[0-9]+")) 
       { 
        s3=s3+s1; 

       } 
       else if(s1.equals("+") ||s1.equals("-") ||s1.equals("*") ||s1.equals("/") ||s1.equals("%") ||s1.equals("(") ||s1.equals(")")) 
       { 
        if(s3!="") 
        { 
        a1.add(s3); 
        } 
        a1.add(s1); 
        s3=""; 

       } 

     } 

    } 

    System.out.println(a1); 

    } 
} 

希望它可以帮助你!

+0

不,它不是帮助我,非常感谢你 – safana

+0

我已经改变了代码请尝试运行这个 –

+0

也这并不帮我 – safana

相关问题