这可能是一个可能的重复,但我尝试了许多可用的答案从这里,但没有一个工作为我的要求。我想使用listOf(“”,“”)分隔符将String =“”拆分为["“,“”,“”],并希望将它们保留在上面的结果数组中。请注意,字符串本身是由一组字符组成的。
roejwanj1#
只使用作为一个向后看给出的分隔符,分裂到你想要的,除了最后一个元素:
String str = "क्षत्रिय"; List<String> delims = List.of("श्र","क्ष","त्र","ज्ञ"); String[] parts = str.split("(?<=(" + String.join("|", delims) + "))");
输出量:
[क्ष, त्र, िय]
为了完全按照你的愿望分割,我必须在最后一个字符上添加一个备用分割:
String[] parts = str.split("(?<=(" + String.join("|", delims) + "))|(?=.$)");
[क्ष, त्र, ि, य]
yc0p9oo02#
不确定这是否是Java vsKotlin的问题(因为我所关注的答案来自Java,考虑到两者都是可互操作的),但根本问题在于Kotlin的split方法中使用的直接字符串字面量。下面的代码不起作用:
val array = "क्षत्रिय".split("(?<=(श्र|क्ष|त्र|ज्ञ))|(?=.\$)") println(array) Answer: [क्षत्रिय] // no split
但使用Pattern.compile(<string_regex>)如下工作:
Pattern.compile(<string_regex>)
val array = "क्षत्रिय".split(Pattern.compile("(?<=(श्र|क्ष|त्र|ज्ञ))|(?=.\$)")) println(array) Answer: [क्ष, त्र, ि, य] // splits as expected
AndroidStudio中这两段代码的区别:
单行正则表达式是从Bohemian对这个问题的回答中得出的。
2条答案
按热度按时间roejwanj1#
只使用作为一个向后看给出的分隔符,分裂到你想要的,除了最后一个元素:
输出量:
为了完全按照你的愿望分割,我必须在最后一个字符上添加一个备用分割:
输出量:
yc0p9oo02#
不确定这是否是Java vsKotlin的问题(因为我所关注的答案来自Java,考虑到两者都是可互操作的),但根本问题在于Kotlin的split方法中使用的直接字符串字面量。
下面的代码不起作用:
但使用
Pattern.compile(<string_regex>)
如下工作:AndroidStudio中这两段代码的区别:
单行正则表达式是从Bohemian对这个问题的回答中得出的。