2012-03-02 4 views
0

ターミナルでファイルをロードして実行するプロセスを使用してシェルスクリプトを実行するコードを少し書いています。私がいる問題は、たとえば、原因のスペースに、端末によって認識されるファイル名を取得している:虚偽のエスケープ文字の後ろにスペースが付きます

"$ ./run_file.sh foo bar.ss" 

"$ ./run_file.sh foo\ bar.ss" 

置き換え、それを変更するには、相続人はコードとしての端末で実行する必要がありますそれは:

JPanel panel1 = new JPanel(); 
JButton button = new JButton("Run"); 
button.setAlignmentX(Component.CENTER_ALIGNMENT); 

button.addActionListener(new ActionListener(){ 

    public void actionPerformed(ActionEvent event){ 

     run(); 

    } 

}); 
//button.setAlignmentX(0.5); 
panel1.add(button); 
panel1.add(Box.createVerticalGlue()); 
panel1.add(button); 

menuB = new JMenuBar(); 

JMenu dropD = new JMenu("File"); 
menuB.add(dropD); 

JMenuItem loadR = new JMenuItem("Load file"); 
JMenuItem quit = new JMenuItem("Quit"); 
dropD.add(loadR); 
dropD.add(quit); 
loadR.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent event) { 
      JFileChooser fileopen = new JFileChooser(); 

      int r= fileopen.showDialog(panel, "Load file"); 

      if (r == JFileChooser.APPROVE_OPTION) { 
       File file = fileopen.getSelectedFile(); 
       String string = file.toString(); 
       string = string.replaceAll(" ", "\ "); 
       //String output = aa.replaceAll("/",Character.toString(File.separatorChar)); 
       System.out.println(string); 
       loadFile = file; 
     } 

     } 
    }); 

私はString.replaceAllを使用してみましたが、

java:66: illegal escape character 
0取得されています

私はFile.separatorCharを使用できることを実現:

string = string.replaceAll(" ", Character.toString(File.separatorChar)+" "); 

が、これは何を交換していないようです... 任意の助けもいただければ幸いです。

おかげ

答えて

2

あなたは文字列内(エスケープ文字である)\文字を入れたい場合は、あなたがそれをエスケープする必要があります:

string = string.replaceAll (" ", "\\ "); 

単一\のような、文字をリードするエスケープシーケンスであります\n(改行)または\r(改行)です。単一文字は、エスケープの完全なリストは、次のとおりです。

\b backspace 
\t tab 
\n linefeed (newline) 
\f form feed 
\r carriage return 
\" double quote 
\' single quote 
\\ backslash 

これは、8進数のエスケープシーケンスなど\0\12または\377などの他にあります。それはあなたに区切り CHAR(UNIXおよびその兄弟の下/)ではなく、あなたが必要なエスケープ文字\を与えるので、あなたのseparatorCharソリューションが動作しませんなぜ

理由があります。

2

あなたは、文字列を使用すると、バックスラッシュをエスケープする必要が実際のバックスラッシュを含むようにしたい場合。

string = string.replaceAll(" ", "\\ "); 

、メソッドの第2引数は2文字の文字列になります。このコードを使用する:スペースバックスラッシュをそれ以外のjavacは、あなたがエスケープ必要のない、スペースを脱出しようとしていると考えています。私はそれがあなたが望むものだと思います。

文字/文字リテラルエスケープシーケンスの詳細については、section 3.10.6 of the Java Language Specificationを参照してください。

関連する問題