我在Java脚本引擎执行的JavaScript中解析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
对应字符串。
是否有一个漂亮的解决方案可以通过可变数量的空白进行拆分,这个空白可以同时使用两个脚本引擎?或者你必须采用“脏”的方式 - 即从脚本中确定脚本引擎(如果可能的话)?
答案 0 :(得分:3)
使用正则表达式文字怎么样?
line.split(/\\s+/)
在每个JS引擎中应该完全相同。