基本上我想一个字符串分割成一个数组的空间和运营商界定,但保留了运营商,同时消除了空间将字符串分割保持一定的分隔符,但除去另一个
前。 3 52 9+- 2 3 * /
将[3][52][9][+][-][2][3][*][/]
基本上我想一个字符串分割成一个数组的空间和运营商界定,但保留了运营商,同时消除了空间将字符串分割保持一定的分隔符,但除去另一个
前。 3 52 9+- 2 3 * /
将[3][52][9][+][-][2][3][*][/]
要在拆分是消耗分隔符它们是空白的,并没有消耗分隔符它们是数学符号逻辑。为了达到这个目的,我们可以使用向前的符号进行分割,并使用普通的\\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, *, /]
试试这个正则表达式:
([\-]?[^\s\+\-\*\/]+|[\+\-\*\/])
它将选择:
[\-]?
符号或无符号
[^\s\+\-\*\/]
人物既不是空格,也不[+ - * /]
or
[\+\-\*\/]
[+ - * /]
只要符合你的情况。
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 , *, /]
这看起来很像我的回答,而且看起来你的号码在最后还有额外的空格。 –
是的,我已经upvote你的答案,你的代码有错误,我解决它并回答它 –
得到downvoted后,我意识到,你可能有运营商任意数量的一起。正则表达式可能不是这样做的最佳工具。 –
是的,我会的。你建议我做什么? – orangespire
我在下面恢复了我的答案。它没有给你准确的期望输出,但它很接近。 –