直到现在我为了保存事实或将它们加载到内存中而硬编码文件路径,但是当我要求带有showSaveDialog()的文件并使用getAbsolutePath获取路径和名称时,我在代码中进行了修改()。代码片段如下:
int retVal = fs.showSaveDialog(this);
if (retVal == fs.APPROVE_OPTION){
fn = fs.getSelectedFile().getAbsolutePath();
.
.
.
现在,接收字符串的变量称为fichero,并在jess语句中使用,如下所示:
motor.eval("(save-facts "+fichero+")");
motor是rete引擎的实例。 问题是jess使用字符串但是使用简单的反斜杠'\',并且它没有得到正确保存,因为它将所有字符串作为文件名。 我已经使用了Jess控制台,并注意到相同的字符串,但上面有双反斜杠'\'将其正确保存到指定的路径中。如何用String fichero上的double替换单斜杠?我尝试使用fichero.replaceAll()方法,使用两个字符串作为参数,一个使用单斜杠,另一个使用双斜杠,但似乎java没有得到它。描述的参数声明为String var1 =“\”和String var2 =“\\”。使用println我观察到每个都有一个单反斜杠,但是当应用于replaceAll()方法时似乎没有用。 有人可以帮忙吗? 提前致谢!
答案 0 :(得分:0)
replaceAll中的第一个字符串是一个模式。在一个模式中,单个' \'必须通过添加另一个反斜杠来转义。在替换字符串中,' \'也有特殊的意义。
s = s.replaceAll( "\\\\", "\\\\\\\\" );
奇怪,但不过......
答案 1 :(得分:0)
如果Jess功能存在可用的Java API,则应使用它而不是构建命令字符串并解释它;它会变得更简单,更容易,也更有效率。对于save-facts案例,确实存在这样的API:jess.Rete
类有三个ppFacts()
重载,可以直接将所需事实打印到您提供的Writer
。有关Javadocs的信息,请参阅here。