[英]How do I split a string into an array, but keep multiple digit numbers/words together?
我正在用Java開發一個簡單的LISP解釋器,一直想弄清楚如何正確分割用戶的輸入,使每個字符都位於不同的索引上,但多個數字和可能的單詞除外。 我還需要擺脫空白,這也會帶來其他一些問題。
現在,我用來將用戶輸入拆分為字符串以進行計算的行是:
String[] mainFunc = equation.replaceAll("\\s+", "").split("(?!^)");
Input: (+ 4 3)
Output:
0) (
1) +
2) 4
3) 3
4) )
這可以滿足我需要的直到2位或更多位的數字,因為它將它們分成單獨的索引。 然后,我嘗試在這里找到的另一個正則表達式幾乎滿足了我的需求,這是:
String[] mainFunc = equation.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
Input: (- 10 3)
Output:
0) (-
1) 10
2)
3) 3
4) )
這幾乎為我解決了,但隨后我需要拆分第一個括號和運算符,並消除該空白(我嘗試循環修整,但無法擺脫索引2中的空格某些原因)。
關於最佳方法的任何想法嗎?
根據您的問題和提及的輸出,我將執行以下操作
(-10 3)至(-10 3)
這是我的代碼
String equation="(- 10 3)";
equation=equation.replaceAll("\\(","\\( ");
equation=equation.replaceAll("\\)"," \\)");
String[] mainFunc = equation.split("\\s+");
System.out.println(Arrays.toString(mainFunc));
和輸出是
[(, -, 10, 3, )]
split表達式會消耗掉,因此您可以在其中占用空白。 在空格上或在非數字/非空格之前/之后拆分:
String[] mainFunc = equation.split("\\s+|(?<=[^ \\d])\\s*|\\s*(?=[()-])");
這適用於您的示例。
String equation = "(- 10 3)";
String[] mainFunc = equation.split("\\s+|(?<=[^ \\d])\\s*|\\s*(?=[^ \\d])");
Arrays.stream(mainFunc).forEach(System.out::println);
輸出:
(
-
10
3
)
哦..最后我得到了簡單的答案..
String[] arr = a.split("(?=\\D)(?)");
代替D,W也可以工作。
但是,需要修剪。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.