searchValue
이 RegEx 표현식 일 때 Rhino의 Java String 객체에서 .replace(searchValue, newValue)
을 호출하는 데 문제가 있습니다. searchValue
이 RegEx 표현식이 아니거나 JavaScript 내에서 시작된 String에 대해 메소드가 호출 될 때이 방식은 정상적으로 작동합니다.Rhino : Rhino에서 Java String에서 RegEx 표현식을 평가하는 방법은 무엇입니까?
예 :
샘플 자바 객체와
public class MyTestObject {
public String returnStringValue() {
return " This is a string with spaces ";
}
}
는 코뿔소의 설정 문자열을 반환하는 방법, 자바 객체
import java.io.FileNotFoundException;
import javax.script.*;
public class TestRhino{
public static void main(String[] args) throws FileNotFoundException, ScriptException, NoSuchMethodException {
// Create my Java Object
MyTestObject testObject = new MyTestObject();
// Initiate the JavaScript engine
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
Compilable compEngine = (Compilable)engine;
// evaluate my JavaScript file; add my Java object to it
engine.eval(new java.io.FileReader("MyJavaScriptFile.js"));
engine.put("testObject", testObject); // this adds my Java Object to Rhino
// Invoke my javaScript function
Invocable inv = (Invocable) engine;
Object returnVal = inv.invokeFunction("testFunction");
// print out the result
System.out.println(returnVal); // should print "ThisisaString" to the console
}
}
내 자바 스크립트 함수의 생성 (이 코드 은을 수정할 수 없습니다.
function testFunction() {
let myString = testObject.returnStringValue();
return myString.replace(/\s/g,""); // Error!
}
이 경우 오류 The choice of Java constructor replace matching JavaScript argument types (function,string) is ambiguous; candidate constructors are: class java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence)
가 발생합니다.
그러나 JavaScript 함수를 다음과 같이 수정하면 Rhino에서 예상 값을 반환하고 오류가 발생하지 않습니다.
function testFunction() {
let myString = testObject.returnStringValue();
return myString.replace("T", "P"); // Phis is a string with spaces
}
다음 JavaScript 기능은 Rhino에서 호출 할 때도 작동합니다.
function testFunction() {
return " This is a string with spaces ".replace(/\s/g,""); // Thisisastringwithspaces
}
JavaScript 코드를 수정하지 않고 위의 작업을 수행 할 수있는 방법을 찾고 있습니다. Java 코드 만 수정할 수 있습니다.
참고 :이 기능은 Nashorn (Java1.8 이후의 기본 JavaScript 엔진)에서 잘 작동하지만 Rhino (Java 1.7까지 기본 JavaScript 엔진)를 사용해야합니다.
replace(char oldChar, char newChar);
또는
replace(CharSequence target, CharSequence replacement);
을 -
자바 코드가 아니라 JavaScript 코드에서'.replace (val1, val2)'가 호출되기 때문에이 문제를 어떻게 해결할 수 있을지 모르겠다. returnStringValue()의 반환 값을 CharSequence로 변경하려고했지만 동일한 문제가 발생했습니다. – Pauline