簡體   English   中英

matcher.find()有什么問題?

[英]what is wrong with matcher.find()?

String s = "1.01";
Matcher matcher = Pattern.compile("[+-/\\*\\^\\%]").matcher(s);
if (matcher.find()) {
    System.out.println(matcher.group());
}

輸入字符串為“1.01”,輸出為“。”。 我無法理解為什么matcher.find()返回true,輸入字符串中沒有“+”,“ - ”,“*”,“^”,“%”等符號。 為什么會這樣?

除了字符類中第一個或最后一個位置之外的任何其他位置的短划線表示字符范圍,就像[az]匹配a到z中的每個小寫字母一樣,但是[-az]僅匹配短划線,a和z。 如果你看看http://www.asciitable.com/ ,你會發現[+-/]會匹配任何+,-./

此外,您不必在正則表達式中轉義這些符號,尤其是在字符類中。 如前所述,您的主要問題是破折號在角色類中的位置。

你可以修復你的正則表達式

"[+-/\\*\\^\\%]"

"[-+/\\*\\^\\%]"
  ^^

或者沒有不必要的逃避:

"[-+/*^%]"

我很確定你必須逃脫- -用作[0-9]中字符類的范圍符號。 -需要進行轉義,如果你想找到破折號的例子。

如果你重新排列里面的符號,你可以擺脫整個模式,沒有任何逃脫。 [-+*^%]應該有效並且更容易閱讀。

暫無
暫無

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

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