0

我将 JRuby 嵌入到 Java 中,因为我需要使用 Java 字符串作为参数调用一些 Ruby 方法。问题是,我正在调用这样的方法:


String text = ""; // this can span over multiple lines, and will contain ruby code
Ruby ruby = Ruby.newInstance();
RubyRuntimeAdapter adapter = JavaEmbedUtils.newRuntimeAdapter();
String rubyCode = "require \"myscript\"\n" +
                            "str = build_string(%q~"+text+"~)\n"+
                            "str";
IRubyObject object = adapter.eval(ruby, codeFormat);

问题是,我不知道我可以使用哪些字符串作为分隔符,因为如果我发送给 build_string 的 ruby​​ 代码将包含 ruby​​ 代码。知道我正在使用〜,但我认为这可能会破坏我的代码。无论 ruby​​ 代码是什么,我可以使用哪些字符作为分隔符来确保我的代码能够正常工作?

4

2 回答 2

1

使用 heredoc 格式:

"require \"myscript\"\n" +
          "str = build_string(<<'THISSHOUDLNTBE'\n" + text + "\nTHISSHOULDNTBE\n)\n"+
          "str";

this however assumes you won't have "THISSHOULDNTBE" on a separate line in the input.

于 2009-06-14T10:29:43.183 回答
0

由于字符串文本包含任何字符,因此没有字符可用于引号转义,例如您现在使用的 ~。您仍然需要在 java 中转义字符串文本中的波浪号并将其附加到您正在构建的字符串中。

类似于(未经测试,不是 Java 大师):

String rubyCode = "require \"myscript\"\n" +
                            "str = build_string(%q~" + text.replaceAll("~", "\\~") + "~)\n"+
                            "str";
于 2009-06-14T10:21:31.690 回答