大文字小文字を区別しないでreplaceAllしたい
文字列加工について。
Tel:01-1234-5678
という記述の「Tel:」を削除したい。
この場合、String.replaceAll()を使えば置換できるが
大文字小文字がまざっていると、"TEL:"とかやると変換できない。
文字列を toUpperCase() で大文字に揃えてから変換すればいいが
文字列に大文字に変換したくない以下のような文字列があった場合は困る。
ShopName:TestShop Tel:01-1234-5678
toUpperCase()をすると、「ShopName:TestShop」の他の文字も「SHOPNAME:TESTSHOP」と変換されてしまう。
が、それは避けたいので、何かうまい方法がないかと探していたら
Stringのドキュメントを見たら以下の記述があった。
このフォームのメソッド呼び出し str.replaceAll(regex, repl) では、次の式と正確に同じ結果が得られます。
Pattern.compile(regex).matcher(str).replaceAll(repl)
そのため、これにそってメソッドを作ってみた。
public class ReplaceTest { /** * @param args */ public static void main(String[] args) { String regex = "TEL:"; String reql = ""; String text = "ShopName:TestShop Tel:01-1234-5678"; System.out.println("repcale前=>" + text); System.out.println("repcale後=>" + myReplaceAll(regex,reql,text)); } /** * 大文字小文字を区別せずにreplaceAllします * @param regex 置き換えたい文字列 * @param reql 置換後文字列 * @param text 置換対象文字列 */ public static String myReplaceAll(String regex ,String reql,String text){ String retStr = ""; retStr = Pattern.compile(regex,Pattern.CASE_INSENSITIVE).matcher(text).replaceAll(reql); return retStr; } }
実行結果
repcale前 => ShopName:TestShop Tel:01-1234-5678 repcale後 => ShopName:TestShop 01-1234-5678