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

问题描述

嗨,我在 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 "")