2017-03-06 114 views
-1
String s = " x + y "; 
String[] sArr = s.split("\\s*-|+|*|/\\s*"); 

我有一个字符串,如:" x + y "我想要得到与元素的数组:x, +, y(无空格),而不是+,如果我用-,/,*他们也应该工作。我在尝试类似上面的代码,但由于+和/或*,这给出错误。它将它们作为正则表达式的一部分。如何解析x + y,以便在Java中获得x,+,y(一个数组)?

我该如何做这项工作?请帮忙。

+1

你试过白色空间只有分裂? 's.split( “\\ S *”)'。分裂的论点告诉你什么应该来自你想要保留的元素。既然你想保留'+',它不应该是'split'正则表达式的一部分,除非你正在做一些非常棘手的事情。 – ajb

+0

's.replaceAll(“\\ s”,“”)。split(“”)' –

回答

1
String s = " x + y "; 
String[] sArr = s.trim().split("\\s+"); 
System.out.println(sArr[0]+":"+sArr[1]+":"+sArr[2]); 

输出:x:+:y

+0

如果输入字符串之间不包含空格,则代码将不起作用。 –

+0

应该有一些分隔符将一个词与另一个词分开。在这个问题中,OP显然要求按空间分开。否则,如果您不知道分隔符是什么,那么如何将字符串分隔为“x + 25 + 50”? –

+0

是的,OP可能想要使用运算符号分隔字符串。 –

2
String s = " x + y - z/x * y "; 
s = s.replaceAll("\\s+", ""); 

第一替代:

String[] sArr = s.split("((?<=[\\+\\-\\*/])|(?=[\\+\\-\\*/]))"); 
System.out.println(Arrays.toString(sArr)); 

参考:https://stackoverflow.com/a/2206432/5352399

第二替代:

String[] sArr = s.split("\\s*"); 
System.out.println(Arrays.toString(sArr)); 

在这两种情况下,输出:

[x, +, y, -, z, /, x, *, y] 

如果你不想在输出的经营者,你可以做这样的事情。

String[] sArr = s.split("\\s*[-,+,*,/]\\s*"); 
System.out.println(Arrays.toString(sArr)); 

输出:

[x, y, z, x, y] 
相关问题