基本上我想一個字符串分割成一個數組的空間和運營商界定,但保留了運營商,同時消除了空間將字符串分割保持一定的分隔符,但除去另一個
前。 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
我在下面恢復了我的答案。它沒有給你準確的期望輸出,但它很接近。 –