后面跟着空格的非法转义字符



我正在编写一些代码,以便使用在终端中加载和运行文件的进程来运行shell脚本。我遇到的问题是,由于空格的原因,终端无法识别文件名,例如:

"$ ./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)+" ");

但这似乎并不能取代任何东西。。。任何帮助都将不胜感激。

感谢

如果要将字符(即转义符)放入字符串中,则需要对其进行转义:

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

单个是转义序列的前导字符,例如带有n(换行符)或r(回车符)。单字符转义的完整列表是:

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

这是对诸如12377的八进制转义序列s的补充。

separatorChar解决方案不起作用的原因是,它为您提供了分隔符字符(UNIX及其兄弟系统下的/),而不是所需的转义符

如果希望字符串包含实际反斜杠,则需要转义该反斜杠。否则,javac认为您正在尝试逃离空间,而不需要逃离:

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

使用此代码,该方法的第二个参数将是一个2个字符的字符串:反斜杠后跟空格。我想这就是你想要的。

有关字符/字符串文字转义序列的更多详细信息,请参阅Java语言规范的第3.10.6节。

最新更新