2012-09-04 139 views
1

我不擅長的正則表達式,我試圖使用java.lang.StringreplaceAll()方法與代碼段如下正則表達式:PatternSyntaxException:非法重複

A爲:

public class method3 { 

    public static int addTwoNumbers(int one, int two){ 
     return one+two; 
    } 

    public static void main (String[] args){ 
     int total = addTwoNumbers(1, 3); 
     System.out.println(total); 
    } 
} 

與乙取代

null 
public class method3 { 
    /* some writting */ 
    public static int addTwoNumbers(int one, int two){ 
     return one+two; 
    } 
    /*more text*/ 
    public static void main (String[] args){ 
     int total = addTwoNumbers(1, 3); 
     System.out.println(total); 
    }//end of 
} 

這是給我以下錯誤

java.util.regex.PatternSyntaxException: Illegal repetition 

我猜這與/**/字符有關?

你是如何分類的,還有其他需要注意的角色嗎?

編輯:這是錯誤消息

Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Illegal repetition near index 25 
null 
public class method2 { 

    public static int addTwoNumbers(int one, int two){ 
     return one+two; 
    } 

    public static void main (String[] args){ 
     int total = addTwoNumbers(1, 3); 
     System.out.println(total); 
    } 
} 


         ^
    at java.util.regex.Pattern.error(Pattern.java:1924) 
    at java.util.regex.Pattern.closure(Pattern.java:3104) 
    at java.util.regex.Pattern.sequence(Pattern.java:2101) 
    at java.util.regex.Pattern.expr(Pattern.java:1964) 
    at java.util.regex.Pattern.compile(Pattern.java:1665) 
    at java.util.regex.Pattern.<init>(Pattern.java:1337) 
    .... 

調用的replaceAll()

 String a = readFile(directoryToAddFile,startOfCode, endOfCode); 
     String b = textarea.getText().toString(); 
     String content = IOUtils.toString(new FileInputStream(directoryToAddFile)); 
     content = content.replaceAll(a, b); 
     IOUtils.write(content, new FileOutputStream(directoryToAddFile)); 
+0

該代碼片段是不是他們? – RNJ

+1

如果您顯示失敗的代碼,這將有所幫助。是的,'*'在正則表達式中具有特殊含義......但是可能正則表達式不是這裏最好的方法。 –

+1

調用replaceAll在哪裏? – KidTempo

回答

9

目前,你的代碼試圖分析 「以取代」 字符串作爲一個正則表達式。

要直接替換字符串而不是正則表達式,可以使用Pattern#quote(String)

content = content.replaceAll(Pattern.quote(a), b); 

此外,作爲一個側面說明,你可能會發現更多String#replace(CharSequence, CharSequence)在這種情況下,比的replaceAll爲宜。

+0

我已經嘗試了你的兩個建議,但都沒有工作(沒有工作),我沒有收到錯誤,但它沒有替換任何內容的文本 – flexinIT

+0

在這種情況下,替換方法根本不會在其他字符串中找到您的字符串。儘管如此,這完全是一個不同的問題,所以如果你想問它,請創建一個新問題,而不是編輯這個問題。但是,通過一些簡單的調試就可以輕鬆解決這個問題。 – Vulcan

+0

是的,在其中一個字符串的末尾有空白,所以在它工作的字符串上的.trim()之後,乾杯 – flexinIT

0

你的問題很可能是因爲你試圖更換的幾個字符以及你試圖替換的字符。正則表達式可能不是你想在這裏使用的工具。從www.regular-expressions.info,需要注意的字符是[] \^$。|?* +()

請閱讀該網站以查看正則表達式的用法/侷限性。