2009-06-14 79 views
0

我在Java中嵌入JRuby,因爲我需要用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); 

的事情是,我不知道我能作爲分隔符使用的字符串,因爲如果Ruby代碼,我發送給build_string將包含紅寶石代碼。我知道我正在使用〜,但我認爲這可能會破壞我的代碼。我可以使用哪些字符作爲分隔符來確保無論Ruby代碼是什麼,我的代碼都能正常工作?

回答

1

使用定界符格式:

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

但是這是假定你不會有 「THISSHOULDNTBE」 在一個單獨的行輸入。

+0

我將生成一個heredoc開始和結束的字符串。 – Geo 2009-06-14 10:36:25

0

由於字符串文本包含任何字符,因此沒有字符可用於像現在使用的〜引用轉義。你仍然需要在java中的字符串文本中跳過波浪符,然後把那個字符串附加到你正在創建的字符串中。

喜歡的東西(未經測試,而不是Java大師):

String rubyCode = "require \"myscript\"\n" + 
          "str = build_string(%q~" + text.replaceAll("~", "\\~") + "~)\n"+ 
          "str";