如何在java中删除带双引号的单引号

时间:2014-04-11 07:11:00

标签: java regex string batch-file

我对正则表达式模式匹配没有任何想法,当我通过exec()命令运行批处理文件时,我遇到文件路径中的单引号问题,我得到以下错误,即

错误是 -

Windows无法找到C:\ Program'。

当CMD尝试进入所需目录时,我遇到单引号问题。 所以,任何人都可以告诉我该怎么做?

我创建了一个批处理文件来编译和运行java程序我有一个名为createrunbat(String,String)的函数,代码如下:

private File createrunbat(String str,String par)
 {
 if(str.startsWith("Text Editor-",0))
 {
     str=str.replaceFirst("Text Editor-","");
 }
 String sng,s2;
 File fe;
 try{

 FileOutputStream fos;
 DataOutputStream dos;

 sng=str;

 int a=sng.indexOf(".");

 sng=sng.substring(0,a);

 file=new File(jfc.getSelectedFile().getParent(),sng+".bat");

 fd=file.getAbsoluteFile();

 str=fd.getParent().substring(0, 2);

 fos=new FileOutputStream(file);
 dos=new DataOutputStream(fos);

 dos.writeBytes("@echo off \n");
 dos.writeBytes("cd\\"+"\n");

 if(fd.getParentFile().isDirectory())
 {
     dos.writeBytes(str+"\n");
 }
 s2=jfc.getSelectedFile().getParent();//I am having single quote problem from here
 dos.writeBytes("cd "+s2+"\\"+"\n");
 dos.writeBytes("javac "+sng+".java"+"\n");
 dos.writeBytes("java "+sng+" "+par+"\n");
 dos.writeBytes("pause \n");
 dos.writeBytes("exit \n");
 dos.close();
 }
 catch(FileNotFoundException ex)
 {
 }
 catch(IOException ex2)
 {
     JOptionPane.showMessageDialog(this,ex2.toString());
 }

  return fd;
 }

2 个答案:

答案 0 :(得分:1)

我认为这是一个更多的情况,路径名中的空白会造成麻烦,您需要在路径周围包装引号

dos.writeBytes ("cd \"" + s2 +"\""+"\n");

答案 1 :(得分:0)

您可能会将错误输出与输入混淆。

Windows cannot find 'C:\Program'.

那里的单引号用于包装有问题的数据,以便开发人员知道导致问题的输入边界。单引号不是程序解释的部分。

正如其他人所说的那样,我认为真正的问题是你路径中的空白。您的命令行将路径读取为两个单独的参数而不是一个。具有讽刺意味的是,将路径包装在引号中可以解决问题。

'C:\Program Files\SomePlace\...'
           ^ gets cut on whitespace and becomes two arguments instead of one:
'C:\Program' and 'Files\SomePlace\...'

'"C:\Program Files\SomePlace\..."'
 ^ quotes will keep the path together as a single argument

编辑:如何包装路径。

Java1在他们的答案中有一个很好的解决方案,所以我将提供一个使用字符串格式的替代方案。

String safePath = String.format("\"%s\"", jfc.getSelectedFile().getParent().getAbsolutePath()); 

在这种情况下,String.format()方法的第一个参数是要使用的模式,第二个是要替换的变量。
必须转义路径周围的实际引号(\"),因为它们在java中具有特殊含义以表示String的开头或结尾。您必须转义它们才能在String中使用它们。占位符是放置路径的位置(%s)。

旁注:

您应该在代码中使用更多描述性变量名称。使用s2sngfefd等名称是非常糟糕的做法。对您的命名和跟踪具有描述性和准确性,调试和编写代码将变得更加容易。