電子書籍の厳選無料作品が豊富!

Javaのプログラムで文字列に含まれるスラッシュを
全てバックシュラッシュに置換したくてreplaceAllを使用しています。
しかし、正規表現がよく分からず、エラーとなります。
どう記述すれば良いでしょうか?

string.replaceAll("\\/", "\\");
ではエラーとなり、第二引数を\や\\\としてもダメでした。

A 回答 (4件)

知らずに寝ぼけて#2書いてたけど,その回答で間違いないらしい(汗



http://java.sun.com/javase/6/docs/api/java/lang/ …

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\

つまり第二引数で\はエスケープシーケンスとしてみなされない
    • good
    • 0

今朝から回答ぼけっぱなし(俺が間違えてばっかり…)


と思ったけど,ちゃんと生成されたソースみたら回答の通りだったな。

少し調べてみる。JDK 1.7系のバグかもしれない
    • good
    • 0

class fuga{


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

この回答への補足

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

補足日時:2009/04/09 14:36
    • good
    • 0

ん?


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

この回答への補足

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

補足日時:2009/04/09 14:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!