2012-09-04 87 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,需要注意的字符是[] \^$。|?* +()

请阅读该网站以查看正则表达式的用法/局限性。