簡體   English   中英

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

[英].replaceAll() method not working correctly

作為問題的背景知識,我加載了一個文本文件,然后從該文本文件中分配了一個短語以成為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)

使用String#replace()而不是String#replaceAll() 后者使用正則表達式模式進行替換,其中*是元字符,需要轉義。

使用以下內容,您必須轉義*字符,因為replaceAll()方法接受正則表達式作為一個參數

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

查看以下示例。

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-此字符串要匹配的正則表達式。

  • replace-將替換找到的表達式的字符串。

輸出: AMROOD

參考:正則表達式替換

問題是*是正則表達式中的保留字符,因此您需要對其進行轉義。

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

“ *”符號用於從正則表達式中識別組,該正則表達式是“ 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");

暫無
暫無

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

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