小编典典

非法转义字符后跟空格

java

我正在编写一些代码,以使用在终端中加载并运行文件的过程来运行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)+" ");

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

谢谢


阅读 320

收藏
2020-11-30

共1个答案

小编典典

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

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

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

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

这是除了八进制转义序列S,从而为\0\12\377

您的separatorChar解决方案无法正常工作的原因是,它为您提供了 分隔符
char(/在UNIX及其弟兄下),而不是\您所需的转义符。

2020-11-30