簡體   English   中英

String.split() 在元字符處 +

[英]String.split() at a meta character +

我正在制作一個簡單的程序,該程序將處理來自方程的字符串輸入的方程但是,當我運行它時,由於嘗試將“+”替換為“+”,因此我可以拆分字符串,因此出現異常在空間。 我應該如何使用

字符串 replaceAll 方法來替換這些特殊字符? 下面是我的代碼

線程“main”中的異常 java.util.regex.PatternSyntaxException:在索引 0 + 附近懸空元字符 '+'

 public static void parse(String x){
       String z = "x^2+2=2x-1";

       String[] lrside =  z.split("=",4);
       System.out.println("Left side: " + lrside[0] + " / Right Side: " + lrside[1]);
       String rightside = lrside[0];
       String leftside = lrside[1];

       rightside.replaceAll("-", " -");
       rightside.replaceAll("+", " +");
       leftside.replaceAll("-", " -"); leftside.replaceAll("+", " +");
       List<String> rightt = Arrays.asList(rightside.split(" "));
       List<String> leftt = Arrays.asList(leftside.split(" "));

       System.out.println(leftt);
       System.out.println(rightt);

replaceAll接受一個正則表達式作為它的第一個參數。

+是一個特殊字符,表示一個或多個出現的量詞。 因此應該轉義以指定文字字符+

rightside = rightside.replaceAll("\\+", " +");

(字符串是不可變的,因此有必要將變量分配給replaceAll的結果);

對此的替代方法是使用刪除元字符狀態的字符類

rightside = rightside.replaceAll("[+]", " +");

最簡單的解決方案是使用使用非正則表達式String文字的replace方法:

rightside = rightside.replace("+", " +"); 

我對regex = "?"有類似的問題 . 它發生在所有在正則表達式中具有某種意義的特殊字符上。 因此,您需要將"\\\\"作為正則表達式的前綴。

rightside = rightside.replaceAll("\\+", " +");

String#replaceAll需要regex作為輸入, +不是正確的模式, \\\\+將是模式。 rightside.replaceAll("\\\\+", " +");

這背后的原因是 - 正則表達式有保留字符。 因此,當您使用 java split() 方法拆分它們時,您必須將它們與轉義一起使用。 例如,您想按 + 或 * 或 dot(.) 進行拆分,則必須根據需要將其作為 split("\\+") 或 split("\\*") 或 split("\\.") 進行.

我對正則表達式的長期解釋背后的原因是-

您也可能在其他地方遇到它。

例如,如果您使用 java 的 replace 或 replaceAll 方法,則會出現同樣的問題,因為它們也是基於正則表達式工作的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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