簡體   English   中英

String的matches()方法的奇怪行為

[英]Strange behavior of String's matches() method

我遇到了一個關於String的匹配(RegExp)方法的有趣問題。

assertTrue("33CCFF".matches("[0-9A-Za-z]{6}"));
assertTrue("CC33FF".matches("[0-9A-Za-z]{6}"));
assertTrue("CC3355".matches("[0-9A-Za-z]{6}"));
assertTrue("CC9955".matches("[0-9A-Za-z]{6}"));
assertTrue("CC3366".matches("[0-9A-Za-z]{6}"));
assertTrue("CC3965".matches("[0-9A-Za-z]{6}"));
assertTrue("CC1961".matches("[0-9A-Za-z]{6}"));
assertTrue("CC9999".matches("[0-9A-Za-z]{6}"));
assertTrue("СС3966".matches("[0-9A-Za-z]{6}")); // failing
assertTrue("СС9965".matches("[0-9A-Za-z]{6}")); // failing
assertTrue("СС9966".matches("[0-9A-Za-z]{6}")); // failing

最后3個斷言意外失敗。 我找不到為什么會發生這種奇怪的行為的原因。 你有同樣的問題嗎? 你有什么想法?

順便說一下,如果被問到,我的java版本如下。

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

最后三個實際上並不是以ASCII“C”字符開頭。 它們以非ASCII字符開頭, 看起來像“C”。 這與[0-9A-Za-z]集合中的任何內容都不匹配,因此模式失敗。

(我通過將代碼復制並粘貼到文本編輯器中來發現這一點,該文本編輯器不能很好地處理非ASCII字符 - 它們以“?”形式出現。)

你的“СС3966”(我正在剪切和粘貼)被標記為非UTF-8,這就是為什么reg-ex與它們不匹配的原因。 當我更改您的文本並自己鍵入它時,它按預期工作。 不確定從哪里復制這些值,但那是你的問題

暫無
暫無

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

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