Java 拆分字符串,保留一些分隔符,但删除另一个分隔符
基本上,我希望将字符串拆分为由空格和运算符分隔的数组,但在删除空格的同时保留运算符 例如Java 拆分字符串,保留一些分隔符,但删除另一个分隔符,java,regex,Java,Regex,基本上,我希望将字符串拆分为由空格和运算符分隔的数组,但在删除空格的同时保留运算符 例如3529+-23*/ 将是[3][52][9][+][-][2][3][*][/]拆分时需要的逻辑是使用空格分隔符,而不是使用算术符号分隔符。为此,我们可以使用前瞻按符号拆分,使用普通的\\s按空格拆分,并将其从结果中删除 String input = "3 52 9+- 2 3 * /"; input = input.replaceAll("([\\+\\-*/])(.)", " $1$2")
3529+-23*/
将是
[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));
试试这个正则表达式:
([\-]?[^\s\+\-\*\/]+|[\+\-\*\/])
它将选择:
[\-]?
已签名或未签名
[^\s\+\-\*\/]
既不是空格也不是[+-*/]的字符
或
[\+-\*\/]
[+-*/]
与您的情况相符。在被否决后,我意识到您可能有任意数量的运算符。正则表达式可能不是最好的工具。是的,我会的。你建议我怎么做?我在下面恢复了我的答案。它并没有给出您想要的确切输出,但它很接近。我只需要删除所有有空间的元素,然后。。。谢谢哇谢谢!是的,这对我来说是相当令人困惑的东西。这看起来很像我的答案,而且你的数字在结尾附加了额外的空格。是的,我已经更新了你的答案,你的代码中有一个错误,我需要解决它并回答它
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);
}
}
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 , *, /]