Nashorn 和 Rhino:通过空白正则表达式拆分字符串
Nashorn and Rhino: Splitting strings by whitespace regexp
我正在 Java 脚本引擎执行的 Java 脚本中解析 Unix shell 命令输出。我经常需要用可变数量的空格来拆分字符串,因此我决定为此使用正则表达式。
到目前为止,在 Rhino(Java 7 及更早版本)中,我可以使用以下命令按空格拆分字符串:
line.split("\s+")
这在 Nashorn(Java 8 及更高版本)中不再有效,字符串根本就没有拆分。我必须为 Nashorn 使用以下内容:
line.split(new RegExp("\s+"))
现在 - 当然 你可能会说 - 这在 Rhino 中不起作用。但是,我需要在未来至少一年内保持与 Java 7 的兼容性,因此我需要一个适用于两种脚本引擎的解决方案。
我尝试了这个相当丑陋的解决方法:
new java.lang.String(line).split("\s+")
令人惊讶的是,Nashorn 没有运气。显然,它以某种方式强制创建其 NativeString
对应的字符串。
是否有不错的 解决方案来拆分可变数量的空白,并且适用于两种脚本引擎?或者您是否必须采用 "dirty" 方式 - 即从脚本中确定脚本引擎(如果可能的话)?
使用正则表达式怎么样?
line.split(/\s+/)
应该在每个 JS 引擎中以相同的方式工作。
我正在 Java 脚本引擎执行的 Java 脚本中解析 Unix shell 命令输出。我经常需要用可变数量的空格来拆分字符串,因此我决定为此使用正则表达式。
到目前为止,在 Rhino(Java 7 及更早版本)中,我可以使用以下命令按空格拆分字符串:
line.split("\s+")
这在 Nashorn(Java 8 及更高版本)中不再有效,字符串根本就没有拆分。我必须为 Nashorn 使用以下内容:
line.split(new RegExp("\s+"))
现在 - 当然 你可能会说 - 这在 Rhino 中不起作用。但是,我需要在未来至少一年内保持与 Java 7 的兼容性,因此我需要一个适用于两种脚本引擎的解决方案。
我尝试了这个相当丑陋的解决方法:
new java.lang.String(line).split("\s+")
令人惊讶的是,Nashorn 没有运气。显然,它以某种方式强制创建其 NativeString
对应的字符串。
是否有不错的 解决方案来拆分可变数量的空白,并且适用于两种脚本引擎?或者您是否必须采用 "dirty" 方式 - 即从脚本中确定脚本引擎(如果可能的话)?
使用正则表达式怎么样?
line.split(/\s+/)
应该在每个 JS 引擎中以相同的方式工作。