dポイントプレゼントキャンペーン実施中!

JAVA初心者です。
javaのStringクラスについての質問です。
ファイルパス「C:\\Test\\Out\\test.txt」
が入っているString変数w_Filenameの
「\\」を「\」にreplaceしてファイル出力したいのですが、
w_Filename.replaceAll("\\\\","\\")
とやると、
java.lang.StringIndexOutOfBoundsException: String index out of range: 1
とエラーになってしまいます。
どうしたらいいのでしょうか?教えてください。

A 回答 (3件)

前の回答では「replaceAll メソッドがこの例外を投げるはずはありません」と書きましたが、実際はそうでもないようです。



API仕様ドキュメントを注意深く読むと、置換する文字列においてバックスラッシュはエスケープ文字として扱われることと、IndexOutOfBoundsExceptionがスローされる可能性があることがかなり遠回しに書いてあります。(私も最初は気づきませんでした)

それに従うと、replaceAllメソッドに与える引数の2番目は、\ ではなく \\ となりますので、それをソースコート上で表すには "\\" ではなく "\\\\" とすることになります。
結局、
replaceAll("\\\\\\\\", "\\\\");
が正解のようです。
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。
無事、教えていただいた方法でできました。
初心者の私にもわかりやすく、なぜそうなるかまで説明していただいて、本当に感謝いたします。
じっくりしくみを理解しながらプログラム作成する大切さも教えていただいた気がします。
ありがとうございました!!

お礼日時:2004/07/21 10:09

w_Filename.replaceAll("\\\\","\\")


じゃなくて
w_Filename.replaceAll("\\\\\\\\","\\")
ですね。
前者では文字列中の一つのバックスラッシュを一つのバックスラッシュに置換するだけで、結局何も変わりません。
二つのバックスラッシュ文字を表す正規表現は
\\\\
です。それをソースコード中の文字列として表すには、
"\\\\\\\\"
とする必要があります。

ところで、StringIndexOutOfBoundsException はどこで発生していますか? replaceAll メソッドがこの例外を投げるはずはありません。おそらく、StringIndexOutOfBoundsException は replaceAll とは無関係です。
    • good
    • 0
この回答へのお礼

親切な回答、どうもありがとうございました。
色々なことが間違えているかもしれません。。。
理解もしないで質問をしてすいませんでした。
ちなみに、エラーメッセージの上5行は以下の通りでした。もう少し勉強します。ありがとうございました。

java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.charAt(String.java:444)
at java.util.regex.Matcher.appendReplacement(Matcher.java:551)
at java.util.regex.Matcher.replaceAll(Matcher.java:661)
at java.lang.String.replaceAll(String.java:1663)

お礼日時:2004/07/20 10:17

何をしたいのか,今ひとつ解りませんが



\ はエスケープコードといって特殊なコードです
ソース上では "\\" となっていますが
コンパイルすると "\" の1文字に変換されます

なので
「C:\\Test\\Out\\test.txt」を
「C:\Test\Out\test.txt」と変えると
「C:(TAB)est(??)ut(TAB)est.txt」

\T , \t : TAB 0x09
\O : ないので NUL? 0x00

となってしまい,エラーになります
    • good
    • 0
この回答へのお礼

意味のわからない質問にわざわざ回答いただき、どうもありがとうございました。
エスケープは分かっているつもりだったのですが、理解不十分だと再認識しました。また、勉強しなおします。ありがとうございます。

お礼日時:2004/07/20 10:08

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


このQ&Aを見た人がよく見るQ&A