Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

"\"について

String str1 = "C:\Program Files";
String str2 = "sample";
String str3;

str3 = str1 + "\" + str2;

こんな感じに文字列を組み合わせてファイルパスを作るプログラムを作っているのですが、上記のように書くと“文字列リテラルが二重引用符によって正しく閉じられていません”と注意されます。どのようにすればいいのですか?

7

回答

83121

閲覧

7件の回答

評価

0

Java ¥ エスケープ
なんてキーワードでGoogle検索したトップのページです。
http://takeoba.cool.ne.jp/java/escapeSequence.htm

str3 = str1 + "\" + str2;
の \" の部分が、二重引用符で囲われた文字列の中で、
二重引用符を文字として扱うためのエスケープ文字になっています。

str3 = str1 + "\\" + str2;
のようにすればOKかと。

評価

0

おや、そういえばここのページには、エスケープシーケンスに関する記述がないようですね。
正規表現はありますが…。

>きくさん
Javaのほか、C言語やJavaScriptなど、Javaのお仲間の言語では共通する基本なので、しっかり覚えておきましょう。

評価

0

補足です。

String str1 = "C:\Program Files";
も、\記号の部分でエラーが出てしまいますね。
\Pをエスケープシークエンスとして扱おうとしてしまいます。
ここも
String str1 = "C:\\Program Files";
のように、\を二重に重ねましょう。

評価

0

ついでに要らない?補足です。

邪道だろうけど、
String str1 = "C:/Program Files";
というのも。

メリットとしては
・UNIX/Linuxでもそのまま流用できるかも
& 内部で固定で持っているとかではなく、パスの一部が外部から指定されるような場合とか。

デメリットとしては
・ログとかに出したいときに"\"と"/"が混在して見えたりしてカッコ悪いとかあるかも。

デメリットのようでそうでもなさそうなのは
・Runtime#execメソッドとかでcmd.exeとかの引数とするときに問題となりそうだけど・・
たぶん引用符で囲めば問題ないだろうけど(Java上では未確認)
"Program Files"のように半角スペースを含む場合は結局引用符で囲む必要があった筈?で、"絶対に半角スペースとか含まない"とかいう仕様にしているのでもなければ大差ないのでは?と思ったり・・
(Linuxでは半角スペースを含む場合、半角スペースをエスケープしたりするけど、それはどうなるんだろう・・未確認)

評価

0

私も、つまらない補足を。

System.getProperty(String)を利用すると
環境に気にせず、出来たりします。
keyは 
 "file.separator"
で、windows環境なら"\"、Unixなら"/"を返してくれます。

他に便利そうなものは
 "line.separator"とか"path.separator"ですかね。

一度自分のJavaのSystemにどんなプロパティが設定されているか調べてみるのも
面白いですよ。

評価

0

更についでに蛇足ですけど・・。

"file.separator","path.separator"なら
File#separator,File#pathSeparatorでも。
どっちがいいかとか言うのでもなく、ソース上でどう意識するかによってくらいの違いなのでしょうけど。

更に
System#getProperty()の代わりにRuntimeMXBeanなんて・・まで遠回り?するのは少ないんだろうなぁ?

評価

0

今回はファイルパスの話なのでseparatorでも良いですが、エスケープ自体は覚えておきましょう。
\ を使うのはファイルパスに限った話ではないし、覚えておかないと、別の文字でまた同じ疑問に当たることになるかも知れません。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。