public String toLowerCase()
はString内のすべての文字をロケールのルールを用いて小文字に変換します. しかしロケールのルールに従うために予期せぬ変換が起こることがあります.
例えばトルコ語ロケールの
"TITLE".toLowerCase()
は t\u0131tle を返します.
「\u0131」はラテン文字の上にドットのない小文字のIの文字です 以下のサイトのトルコ語の欄を見るとわかりやすいですが,トルコで用いられる”I”と”i”は大文字小文字の関係にないのでこういった現象が起こるようです. 各国ラテン文字一覧
解決するには
toLowerCase(Locale.ROOT)
または
toLowerCase(Locale.ENGLISH)
とするとロケールに依存しない文字列の正しい結果を取得ができます
toUpperCaseも同様です.
javadocにも記されています. Javadoc