如何将字符串转换为字符数组,例如
"abcd" -> ["a","b","c","d"]
我知道分裂的方法:
SELECT split("abcd","");
#["a","b","c","d",""]
是最后一个空格的错误?或任何其他想法?
答案 0 :(得分:1)
我不知道它是否是一个错误或它是如何工作的。作为替代方案,您可以使用explode
和collect_list
从where子句中排除空白
SELECT collect_list(l)
FROM ( SELECT EXPLODE(split('abcd','') ) as l ) t
WHERE t.l <> '';
答案 1 :(得分:1)
这实际上不是错误。配置单元split function仅通过将limit
参数设置为-1
来调用基础Java String#split(String regexp, int limit)
方法,这将导致返回尾随空白。
由于已经有一个brilliant answer描述了问题,因此我不会深入探讨实现原因的细节。请注意,str.split("", -1)
将根据您使用的Java版本返回不同的结果。
一些替代方法:
"(?!\A|\z)"
作为分隔符正则表达式,例如split("abcd", "(?!\\A|\\z)")
。这将使正则表达式匹配器在字符串的开头和结尾位置跳过零宽度匹配。String#toCharArray()
或接受limit
作为UDF的参数,因此可以将其用作:SPLIT("", 0)