Я анализирую выходные данные команды оболочки Unix в JavaScript, выполняемом механизмом сценариев Java. Мне часто приходится разбивать строки на переменное количество пробелов, и я решил использовать для этого регулярное выражение.
До сих пор в 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+")
На удивление не повезло в Нашхорне. По-видимому, он каким-то образом заставляет создавать свой аналог NativeString
для строк.
Есть ли хорошее решение для разделения на переменное количество пробелов, которое работает с обоими обработчиками сценариев? Или надо идти "грязным" путем - т.е. определять скриптовый движок изнутри скрипта (если это вообще возможно)?
String
работает, т.е.:String(line).split(new RegExp("\\s+"))
. Однако литералы регулярных выражений менее подробны. - person pdinklag   schedule 24.03.2015