• ベストアンサー

Javaの正規表現

Javaのプログラムで文字列に含まれるスラッシュを 全てバックシュラッシュに置換したくてreplaceAllを使用しています。 しかし、正規表現がよく分からず、エラーとなります。 どう記述すれば良いでしょうか? string.replaceAll("\\/", "\\"); ではエラーとなり、第二引数を\や\\\としてもダメでした。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)

回答No.3

今朝から回答ぼけっぱなし(俺が間違えてばっかり…) と思ったけど,ちゃんと生成されたソースみたら回答の通りだったな。 少し調べてみる。JDK 1.7系のバグかもしれない

回答No.2

class fuga{ public static void main(String[] args){ String str = "/a/"; /* 第一引数が\\/でも誤りではないが,普通は冗長なのでやらない。むしろ第二引数が問題。 */ str = str.replaceAll("/", "\\\\"); System.out.println(str); } }

vertig0
質問者

補足

第二引数を"\\\\"としたら、置換後は\\となってしまします。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

ん? >("\\/", "\\") この第一引数、エンマーク2つで正しい?(投稿ミスじゃなく? もしそうならこれはエスケープされた文字列としては"\/"を指定してるって事になるけど?

vertig0
質問者

補足

エンマーク2つです。 正規表現では記号の前には\\というように二つ必要だと 見たことがありましたので。

関連するQ&A

専門家に質問してみよう