![](/img/trans.png)
[英]Java exception for using String.Split() method: Dangling meta character
[英]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.