2016-11-22 55 views
1

基本上我想一个字符串分割成一个数组的空间和运营商界定,但保留了运营商,同时消除了空间将字符串分割保持一定的分隔符,但除去另一个

前。 3 52 9+- 2 3 * /

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

+0

得到downvoted后,我意识到,你可能有运营商任意数量的一起。正则表达式可能不是这样做的最佳工具。 –

+0

是的,我会的。你建议我做什么? – orangespire

+0

我在下面恢复了我的答案。它没有给你准确的期望输出,但它很接近。 –

回答

2

要在拆分是消耗分隔符它们是空白的,并没有消耗分隔符它们是数学符号逻辑。为了达到这个目的,我们可以使用向前的符号进行分割,并使用普通的\\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

试试这个正则表达式:

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

它将选择:

[\-]?符号或无符号

[^\s\+\-\*\/]人物既不是空格,也不[+ - * /]

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

只要符合你的情况。

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

这看起来很像我的回答,而且看起来你的号码在最后还有额外的空格。 –

+0

是的,我已经upvote你的答案,你的代码有错误,我解决它并回答它 –

相关问题