- ベストアンサー
Javaの正規表現
Javaのプログラムで文字列に含まれるスラッシュを 全てバックシュラッシュに置換したくてreplaceAllを使用しています。 しかし、正規表現がよく分からず、エラーとなります。 どう記述すれば良いでしょうか? string.replaceAll("\\/", "\\"); ではエラーとなり、第二引数を\や\\\としてもダメでした。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
知らずに寝ぼけて#2書いてたけど,その回答で間違いないらしい(汗 http://java.sun.com/javase/6/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29 http://oshiete1.goo.ne.jp/qa928785.html #3 >#2 補足 俺の環境(1.7.0-b43)では再現しない。 上記Q928785が1.7.0やベータを使っているようには思えないので 多分正式な仕様 Javaのライブラリ何でこんな実装しているんだろ? ============================================== 参考: C# → String.Replaceはどちらも正規表現ではなし。 str = "/a/"; str = str.replace("/","\\"); System.Console.WriteLine(str); // \\a\\ class Program { public static void Main(string[] args) { string s = "/a/"; System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex("/"); System.Console.WriteLine(r.Replace(s,"\\")); System.Console.ReadKey(true); } } → \a\ つまり第二引数で\はエスケープシーケンスとしてみなされない
その他の回答 (3)
- himajin100000
- ベストアンサー率54% (1660/3060)
今朝から回答ぼけっぱなし(俺が間違えてばっかり…) と思ったけど,ちゃんと生成されたソースみたら回答の通りだったな。 少し調べてみる。JDK 1.7系のバグかもしれない
- himajin100000
- ベストアンサー率54% (1660/3060)
class fuga{ public static void main(String[] args){ String str = "/a/"; /* 第一引数が\\/でも誤りではないが,普通は冗長なのでやらない。むしろ第二引数が問題。 */ str = str.replaceAll("/", "\\\\"); System.out.println(str); } }
- SAYKA
- ベストアンサー率34% (944/2776)
ん? >("\\/", "\\") この第一引数、エンマーク2つで正しい?(投稿ミスじゃなく? もしそうならこれはエスケープされた文字列としては"\/"を指定してるって事になるけど?
補足
エンマーク2つです。 正規表現では記号の前には\\というように二つ必要だと 見たことがありましたので。
補足
第二引数を"\\\\"としたら、置換後は\\となってしまします。