我正在编写一些代码,以使用在终端中加载并运行文件的过程来运行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(回车符)。单字符转义的完整列表为:
\n
\r
\b backspace \t tab \n linefeed (newline) \f form feed \r carriage return \" double quote \' single quote \\ backslash
这是除了八进制转义序列S,从而为\0,\12或\377。
\0
\12
\377
您的separatorChar解决方案无法正常工作的原因是,它为您提供了 分隔符 char(/在UNIX及其弟兄下),而不是\您所需的转义符。
separatorChar
/