[英].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.