2009-06-14 5 views
0

Ich habe JRuby in Java eingebettet, weil ich einige Ruby-Methoden mit Java-Strings als Argumente aufrufen muss. Die Sache ist, ich rufe die Methoden wie folgt aus:Welche Zeichen kann ich verwenden, um diese Ruby-Zeichenfolge zu zitieren?


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); 

Die Sache ist, ich weiß nicht, welche Saiten, die ich als Trennzeichen verwenden können, denn wenn der Ruby-Code ich build_string Senden bin enthält Ruby-Code. Richtig, ich benutze ~, aber ich denke, das könnte meinen Code kaputt machen. Welche Zeichen kann ich als Trennzeichen verwenden, um sicherzustellen, dass mein Code funktioniert, unabhängig vom Ruby-Code?

Antwort

1

das heredoc Format verwenden:

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

dies jedoch vorausgesetzt, dass Sie nicht "THISSHOULDNTBE" auf einer separaten Zeile haben in die Eingabe.

+0

Ich werde eine Zeichenfolge mit dem Heredoc beginnen und enden. – Geo

0

Da Zeichenfolgetext ein beliebiges Zeichen enthält, gibt es kein Zeichen, das für das Ausbrechen eines Zitats wie das ~ verwendet werden kann, das Sie jetzt verwenden. Sie müssten immer noch die Tilde in einem String-Text in Java auskommentieren und diese an die von Ihnen erstellte Zeichenfolge anhängen.

So etwas wie (ungetestet, kein Java-Guru):

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