1

到目前为止,我对文件路径进行了硬编码以保存事实或将它们加载到内存中,但是当我使用 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 控制台并注意到相同的字符串但带有双反斜杠 '\' 将其正确保存到指定的路径中。如何用字符串 fichero 上的双斜杠替换单斜杠?我尝试使用 fichero.replaceAll() 方法,使用两个字符串作为参数,一个带有单斜杠,另一个带有双斜杠,但似乎 java 不明白。所描述的参数声明为 String var1 = "\" 和 String var2 = "\\"。使用 println 我观察到每个都有一个单反斜杠和双反斜杠,但是没有 nt 在应用于 replaceAll() 方法时似乎有效。任何人都可以帮忙吗?提前致谢!

4

2 回答 2

0

replaceAll 中的第一个字符串是一个模式。在一个模式中,单个 '\' 必须通过为另一个反斜杠添加前缀来进行转义。在替换字符串中,'\' 也有特殊含义。

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

很奇怪,不过……

于 2014-06-19T18:24:13.127 回答
0

如果 Jess 特性存在可用的 Java API,您应该使用它而不是构建命令字符串并解释它;它会变得更简单、更容易、更高效。对于保存事实的情况,确实有这样一个 API:jess.Rete该类具有三个重载,ppFacts()其中将所需的事实直接漂亮地打印到Writer您提供的一个。有关 Javadocs,请参见此处

于 2014-06-20T11:54:52.167 回答