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

File.separatorCharを使用できることに気づきました:

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

しかし、これは何にも取って代わるものではないようです...どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

2

文字列に実際の円記号を含める場合は、円記号をエスケープする必要があります。それ以外の場合、javacは、スペースをエスケープしようとしていると見なします。スペースをエスケープする必要はありません。

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

このコードを使用すると、メソッドの2番目の引数は2文字の文字列になります。バックスラッシュの後にスペースが続きます。私はそれがあなたが望むものだと思います。

文字/文字列リテラルのエスケープシーケンスの詳細については、Java言語仕様のセクション3.10.6を参照してください。

于 2012-03-02T11:35:31.847 に答える
2

文字(エスケープ文字)を文字列内に配置する場合\は、エスケープする必要があります。

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

シングルは、 (改行)や(キャリッジリターン)\などのエスケープシーケンスの先頭文字です。1文字のエスケープの完全なリストは次のとおりです。\n\r

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

これは、、、などの8進数のエスケープシーケンスに追加さ\0\12ます\377

separatorCharソリューションが機能しない理由は、必要なエスケープ文字ではなく、区切り文字(/UNIXとその兄弟の場合)が表示されるため\です。

于 2012-03-02T11:36:12.987 に答える