如何在DXL脚本的字符串数组的每个元素中的第一个大写字母中插入空格字符?

时间:2018-08-01 16:19:45

标签: ibm-doors

我想使用在for循环中使用的DXL脚本编辑字符串数组的元素。该问题将在下面进行描述: 我想在每个大写字母的前面插入空格,并期待第一个大写字母的使用,并将其应用于字符串数组中的所有行。

示例:

有一个字符串数组:

AbcDefGhi

GhiDefAbc

DefGhiAbc

最后我希望看到的结果是:

Abc Def Ghi

Ghi Def Abc

Def Ghi Abc

谢谢!

2 个答案:

答案 0 :(得分:0)

直接来自DXL手册。

Regexp upperChar  = regexp2 "[A-Z]"
string s = "yoHelloUrban"

string sNew = ""
while (upperChar s) {
   sNew = sNew s[ 0 : (start 0) - 1] " " s [match 0]
   s = s[end 0 + 1:]
}
sNew = sNew s
print sNew

您可能需要调整一个事实,即您不希望将每个大写字母都替换为,而只希望那些不在字符串开头的大写字母替换。

答案 1 :(得分:0)

这是一个编写为函数的解决方案,您可以将其放入代码中。它逐个字符地处理输入字符串。始终按原样输出第一个字符,然后在任何后续大写字符之前插入一个空格。

为了提高效率,如果处理大量字符串或非常大的字符串(或同时处理两个字符串),则可以对该函数进行修改,以在最终返回字符串之前将其附加到缓冲区而不是字符串。

string spaceOut(string sInput)
{
    const int intA = 65 // DECIMAL 65 = ASCII 'A'
    const int intZ = 90 // DECIMAL 90 = ASCII 'Z'

    int intStrLength = length(sInput)
    int iCharCounter = 0

    string sReturn = ""

    sReturn = sReturn sInput[0] ""

    for (iCharCounter = 1; iCharCounter < intStrLength; iCharCounter++)
    {
        if ((intOf(sInput[iCharCounter]) >= intA)&&(intOf(sInput[iCharCounter]) <= intZ))
        {
            sReturn = sReturn " " sInput[iCharCounter] ""
        }
        else
        {
            sReturn = sReturn sInput[iCharCounter] ""
        }
    }

    return(sReturn)
}

print(spaceOut("AbcDefGHi"))