は基本的に私は、スペースとオペレータによって区切る配列に文字列を分割が、スペース分割文字列のいくつかの区切り文字を維持するが、別の
の元を除去しながら、オペレータを維持したいと考えて取り除きます。
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));
出力:
([\-]?[^\s\+\-\*\/]+|[\+\-\*\/])
は、それが選択されます:
[3, 52, 9, +, -, 2, 3, *, /]
は、この正規表現を試してみてください
[\-]?
は、符号付きまたは符号なし
[^\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
私は私の答えを復元しました。正確な出力は得られませんが、近いです。 –