簡體   English   中英

命令“ stringa.replaceAll(“ *”,stringb);導致錯誤

[英]Command “stringa.replaceAll(”*", stringb); causes an error

我正在嘗試用第二個字符串替換第一個字符串中的星號。 例如,如果字符串a為“ d * g”,字符串b為“ in”,則在我運行代碼時,字符串a應該變為“ ding”。 但是,當我運行它時,我收到以下消息:

java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*
^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.sequence(Unknown Source)
    at java.util.regex.Pattern.expr(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.replaceAll(Unknown Source)
    at Main.main(Main5.java:404)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

確切的代碼段如下。

String a = scan.nextLine();
String b = scan.nextLine();

a = a.replaceAll("*", b);
System.out.println(a);

有什么方法可以使此代碼按預期運行?

您正在提供一個正則表達式"*" replaceAll ,並且*具有特殊含義。

要提供文字* ,您必須使用反斜杠字符對*進行轉義,而反斜杠字符本身必須在Java中進行轉義。

a = a.replaceAll("\\*", b);

方法String.replaceAll(String, String)將正則表達式作為第一個參數。 為了在正則表達式中使用* ,您必須對其進行轉義。 但是,看起來好像您真的想要String.replace(CharSequence, CharSequence)一樣

String stringa = "d*g";
String stringb = stringa.replace("*", "in");
System.out.println(stringb);

或者,逃避*

String stringc = stringa.replaceAll("\\*", "in");
System.out.println(stringc);

兩者的輸出都是您要求的ding

您正在尋找的是replace方法:

stringa.replace("*", stringb);

用第二個字符串替換第一個字符串的所有實例。 另一方面, replaceAll方法使用正則表達式,而"*"本身不是正則表達式,因為星號字符是修飾符,表示“先前的事情,重復了零次或多次”。

暫無
暫無

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

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