簡體   English   中英

如何將字符串拆分為數組,但將多個數字/單詞保持在一起?

[英]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中的空格某些原因)。

關於最佳方法的任何想法嗎?

根據您的問題和提及的輸出,我將執行以下操作

  • 所有內部元素都可以用空格分割( \\\\ s +
  • 由於第一個和最后一個括號沒有分割項。 因此,您將必須與下面的內部術語分開

(-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM