Javaのmatches
関数を用いた文字列比較で
Dangling meta character '?' near index 0
というエラーが発生したので対策メモ.
##エラー発生状況
matches
関数で二つのString変数の比較を行ったときに発生.
具体的には,
String str1 = "?ABC";
String str2 = "?A";
if(str1.matches(str2 + ".*)) {}
というように,文字列の先頭に?
が含まれる変数の比較を行った.
##原因
文字列中の?
が正規表現記号と判定されてしまうため.
##回避方法
matches
関数の引数の文字列にエスケープ文字\\
をつけてあげればOK.
上記の例だと,次のようにすれば回避できる.
String str1 = "?ABC";
String str2 = "?A";
if(str1.matches("\\" + str2 + ".*")) {}
もしくは,Pattern.quote
でも回避できる.
if(str1.matches(Pattern.quote(str2) + ".*")) {}