.replaceAll()方法无法正常工作

时间:2014-04-25 10:01:10

标签: java regex string

作为问题的一些背景,我加载一个文本文件,然后从该文本文件中分配一个短语成为randomPirateWord,然后我将字母更改为该文本文件,成为**,并且正常工作。但是,当我要求用户猜一个字母时,它无法正常工作,如果他们猜错了那么代码工作正常,但如果他们正确猜出一个字母代码不能正常工作。我已将错误消息放在代码下面:

if (!escape.equalsIgnoreCase("m")){
                    System.out.print(" Type the letter you want to guess: ");
                    char letter = input.nextLine().charAt(0); 

if(m.getRandomPirateWord().contains(letter+"")){
                        System.out.println(m.getRandomPirateWord().replaceAll("*",letter+""));
                    }

Error message:
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*
^
    at java.util.regex.Pattern.error(Pattern.java:1924)
    at java.util.regex.Pattern.sequence(Pattern.java:2090)
    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)
    at java.util.regex.Pattern.compile(Pattern.java:1022)
    at java.lang.String.replaceAll(String.java:2162)
    at uk.ac.aber.dcs.pirate_hangman.TextBasedGame.runTextBasedGame(TextBasedGame.java:45)
    at uk.ac.aber.dcs.pirate_hangman.Application.runApplication(Application.java:19)
    at uk.ac.aber.dcs.pirate_hangman.Main.main(Main.java:6)

5 个答案:

答案 0 :(得分:5)

使用String#replace()代替String#replaceAll()。后者使用正则表达式进行替换,其中*是元字符,需要进行转义。

答案 1 :(得分:1)

使用以下内容,您必须转义*字符,因为replaceAll()方法接受regular expression作为一个参数

replaceAll("\\*",letter+"")

答案 2 :(得分:0)

请查看以下示例。

import java.io.*;

public class Test{
   public static void main(String args[]){
      String Str = new String("Welcome to Tutorialspoint.com");

      System.out.print("Return Value :" );
      System.out.println(Str.replaceAll("(.*)Tutorials(.*)",
                         "AMROOD" ));
   }
}

方法语法:

public String replaceAll(String regex, String replacement)
  • regex - 要与此字符串匹配的正则表达式。

  • replacement - 将替换找到的表达式的字符串。

输出: AMROOD

参考:Regex replacement

答案 3 :(得分:-1)

问题是*是正则表达式中的保留字符,因此您需要将其转义。

replaceAll("\\*",letter+"")

答案 4 :(得分:-1)

'*'符号用于标识正则表达式中的一个组,它是'replaceAll'或'replaceFirst'方法的第一个参数

1. Using ‘replace’ method: This would be the good choice if you want to replace a string literal and not a pattern.


2. Escaping ‘*’ symbol: If you need to a use regular expression, and your pattern has no groups identified, then you can escape any group identification symbols from your replace string as shown below:



String replaceValue = java.util.regex.Matcher.quoteReplacement("*100");