![](/img/trans.png)
[英]get substring between a stringA and next stringB after stringA
[英]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.