如何在 Rhino 中使用 javascript 接受来自控制台的变量?有类似于 cin 或 scanf 的东西吗?
这里有两行可以满足您的要求:
var stdin = new BufferedReader( new InputStreamReader(System['in']) )
var aLine = stdin.readLine();
希望这对您有帮助:
从控制台读取一行的简单函数
function readline()
{
var ist = new java.io.InputStreamReader(java.lang.System.in);
var bre = new java.io.BufferedReader(ist);
var line = bre.readLine();
return line;
}
print("Name? ");
var name=readline();
print("Your name is: "+name);
在Rhino中,您必须记住导入Java包才能使用它们。另外,Java String 与 JavaScript 原生 String 不同,因此您可能需要对其进行强制转换。
这是一个快速而肮脏的
readln()
,在 SpiderMonkey 和 Rhino 中工作相同:
var readln = (typeof readline === 'function') ? (readline) : (function() {
importPackage(java.io);
importPackage(java.lang);
var stdin = new BufferedReader(new InputStreamReader(System['in']));
return function() {
return String(stdin.readLine()); // Read line,
}; // force to JavaScript String
}());
使用Java类库即可。我认为这会起作用:
var stdin = java.lang.System.in;
var line = stdin.readLine();
此时,可以轻松地将行转换为您喜欢的任何类型,或者使用正则表达式将其分成几部分。
这可能会混淆 Unicode 输入,但我不确定是否有跨平台的好方法。
var ins = java.lang.System.in;
var newLine = java.lang.System.getProperty("line.separator");
var is = new java.io.InputStreamReader(ins);
var sb=new java.lang.StringBuilder();
var br = new java.io.BufferedReader(is);
var line = br.readLine();
while(line != null) {
sb.append(line);
sb.append(newLine);
line = br.readLine();
}
var stdin = ""+sb.toString();//java string != javascript string
console.log("stdin:"+stdin);
您可以使用
BufferedReader
代替 Console
:
var console = java.lang.System.console()
var name = console.readLine("What is your name? ");