如何按Dataweave中的字符数拆分字符串

How to split string by number of characters in Dataweave

嗨,我在 Dataweave 中找不到按指定长度拆分字符串的函数。

我需要拆分的字符串是

ThisistheStringineedtoSplit

预期输出是一个包含所有子字符串的数组

payload.splitBy(sizeOf(payload)/10)

[ThisistheString,ineedtoSplit]

我们可以使用递归函数以及围绕字符串索引的内置功能。使用字符串,您可以像 [0 to end] 一样轻松地 select 一个子字符串。然后要获取字符串的其余部分,您可以执行 [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 "")