问题描述
嗨,我在 Dataweave 中找不到按指定长度拆分字符串的函数。
我需要拆分的字符串是
ThisistheStringineedtoSplit
payload.splitBy(sizeOf(payload)/10)
[ThisistheString,ineedtoSplit]
解决方法
我们可以使用递归函数以及围绕字符串索引的内置功能。使用字符串,您可以像 [0 to end]
一样轻松地选择子字符串。要获得字符串的其余部分,您可以执行 [end to -1]
。使用负索引会从后面转换为索引,因此 -1 将是最后一个字符。由于这是一个零索引,我们抓取 [0 to size - 1]
以获得正确数量的字符,然后在 [size to -1]
上再次递归调用。
%dw 2.0
output application/json
fun divideBy(str: String,size: Number): Array<String> =
if (sizeOf(str) <= size) [str]
else [str[0 to size - 1]] ++ divideBy(str[size to -1],size)
var message = "ThisistheStringineedtoSplit"
---
message divideBy 10
输出:
[
"ThisistheS","tringineed","toSplit"
]
在您的示例输出中,子字符串的长度超过 10 个字符。这是一个错误,还是我误解了你想要什么?
编辑:
你也可以用一些正则表达式来做到这一点,尽管我认为这里没有任何真正的好处..我昨天刚好在一次谈话中想到了正则表达式。
%dw 2.0
output application/json
fun divideBy(str: String,size: Number): Array<String> =
flatten(str scan ".{1,$(size)}")
var message = "ThisistheStringineedtoSplit"
---
message divideBy 10
,
这是另一种方法
%dw 2.0
import * from dw::core::Arrays
output application/json
var myStringAsArray = "awefawefwaefawefwaefawefwa" splitBy ""
var denominator = 10
---
(myStringAsArray divideBy denominator) map ($ joinBy "")