質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

エスケープ処理

エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。

Q&A

解決済

2回答

19008閲覧

javaの文字列で\(バックスラッシュ)そのものを\\のように\を2つ重ねる以外の方法で表現したいです。

DAISUKE0549

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

エスケープ処理

エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。

0グッド

0クリップ

投稿2017/03/25 06:16

編集2017/03/25 06:21

###前提・実現したいこと
コマンドライン引数にコピー元ファイル名とコピー先ファイル名を指定し、ファイルをコピーするJavaプログラムを作成しました。プログラムを起動する時は、
java FileCopy C:\Java2017\originalBinary.ods C:\Java2017\destinationBinary.ods
のように第一引数にコピー元ファイル名、第二引数にコピー先名を指定して起動しています。これを
java FileCopy C:\Java2017\originalBinary.ods C:\Java2017\destinationBinary.ods
のようにファイル名の\を2つ重ねずにプログラムが起動するように変更したいです。
現在このプログラムを起動するときは、ファイルの場所をコピーしてそれから手動で\を二つ重ねていますが、この手間を省略できればと考えています。

###該当のソースコード

Java

1コード 2import java.io.FileInputStream; 3import java.io.FileOutputStream; 4import java.io.IOException; 5 6public class FileCopy { 7 public static void main(String[] args) { 8 String originalFile = args[0]; //この部分に変更を加える必要があると思われすが、 9 String destinationFile = args[1]; //解決策が思い浮かびません。 10 try (FileInputStream fis = new FileInputStream(originalFile); 11 FileOutputStream fos = new FileOutputStream(destinationFile);) { 12 int i = fis.read(); 13 while (i != -1) { 14 fos.write(i); 15 i = fis.read(); 16 } 17 fos.flush(); 18 fos.close(); 19 fis.close(); 20 } catch (IOException e) { 21 e.printStackTrace(); 22 } 23 24 } 25}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

.replace("¥","¥¥)で良い様な気がするのですが。
そういう問題ではない?

p.s.
「"」の閉じ無いし、tetratailさんの様な「¥」自身のエスケープも忘れてるし。。。orz(今日は疲れている)

投稿2017/03/25 06:27

編集2017/03/25 06:49
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DAISUKE0549

2017/03/25 06:54

回答ありがとうございました。 String a = "c/d".replace("\","\\")の様なコードを書いてみましたが、「エスケープ・シーケンスが無効です (有効なものは \b \t \n \f \r \" \' \\ です )」というエラーが出てきました。 コマンドライン引数で受け取った文字列に\を二つ重ねるような処理を自動的にして、それらをString型の変数に代入するようなことを実現したいのですが、難しいでしょうか?
退会済みユーザー

退会済みユーザー

2017/03/25 07:05 編集

あれ? String a = "c/d".replace("\","\\") はダメです。 tetratailさんの様に String a = "c\d".replace("\\","\\\\") で試してみてください。 aが"c\\d"となる思うのですが。
guest

0

ベストアンサー

以下でできるかも知れません

java

1import java.io.FileInputStream; 2import java.io.FileOutputStream; 3import java.io.IOException; 4 5public class FC2{ 6public static void main(String[] args) { 7String originalFile = args[0]; 8String destinationFile = args[1]; 9 10String originalFile2 = ""; 11String destinationFile2 = ""; 12 13 14 15originalFile2 =originalFile.replace("¥¥","¥¥¥¥"); 16destinationFile2 =destinationFile.replace("¥¥","¥¥¥¥"); 17 18 19try (FileInputStream fis = new FileInputStream(originalFile2); 20FileOutputStream fos = new FileOutputStream(destinationFile2);) { 21int i = fis.read(); 22while (i != -1) { 23fos.write(i); 24i = fis.read(); 25} 26fos.flush(); 27fos.close(); 28fis.close(); 29} catch (IOException e) { 30e.printStackTrace(); 31} 32 33} 34}

投稿2017/03/25 06:36

編集2017/03/25 06:47
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DAISUKE0549

2017/03/25 07:24

回答ありがとうございました。教えて頂いた方法で試してみるとできました。新たな疑問が生じたのですが、 プログラムの中で、String a = "C\dfjia"のような有効なエスケープシーケンスもなく、\を二つ重ねることをしないコードを書くとエラーになるとおもうのですが、教えて頂いたやり方で、 java FileCopy C:\Java2017\originalBinary.ods C:\Java2017\destinationBinary.ods のようにコマンドライン引数に上記の様に文字列を渡してもエラーにならないのはなぜでしょうか?
退会済みユーザー

退会済みユーザー

2017/03/25 07:33

私が知っているのは、"\"という書き方をするとエラーが出る事と、コード上で「\」一文字を扱いたい場合は"\\"と記述すると可能になるいう経験上知っている事実だけなので、それ以上のシステム上の細部に関する質問は別の方または別の質問にてお願いします
DAISUKE0549

2017/03/25 07:43

回答ありがとうございます。上記のような回答に長文を要するであろう質問はコメント欄に書き込むのではなく、新たに質問するべきでした。申し訳ございませんでした。
swordone

2017/03/25 08:51

多分リテラルのエスケープと混同してる
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問