HCI中的Groovy脚本截断字符串

2020-09-07 06:20发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我们有要求

-截断40 -40个字符的字符串(单词组合)。 所以我们有1个输入和2个输出字段

-在第一个字段中,我们需要检查最后一个单词是否低于40个计数。 它将被添加到第一字段中,否则将其移至第二字段。(在第二字段中,我们也必须应用相同的逻辑),其余40也应在第二字段中进行调整。

-例如 "请访问社区资源部分,"此字符串的总数为49。 现在"请访问社区资源秒"的长度最多为40。因此,我们需要忽略"部分"并将其移至下一个字段。

因此,第一个字段应填写为""请访​​问社区资源",而下一个字段应填写为"适用于"的部分

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我们有要求

-截断40 -40个字符的字符串(单词组合)。 所以我们有1个输入和2个输出字段

-在第一个字段中,我们需要检查最后一个单词是否低于40个计数。 它将被添加到第一字段中,否则将其移至第二字段。(在第二字段中,我们也必须应用相同的逻辑),其余40也应在第二字段中进行调整。

-例如 "请访问社区资源部分,"此字符串的总数为49。 现在"请访问社区资源秒"的长度最多为40。因此,我们需要忽略"部分"并将其移至下一个字段。

因此,第一个字段应填写为""请访​​问社区资源",而下一个字段应填写为"适用于"的部分

付费偷看设置
发送
7条回答
hengyuye
1楼 · 2020-09-07 07:19.采纳回答

您好,Anurag

实际上,您的问题并不简单。 想到的第一个解决方案是使用\ s +正则表达式(即空白)上的String.split拆分字符串。 但是,String.split占用了分隔符,这意味着所有空格将从文本中消失。 不好。

不过,还有另一种选择。 在单词边界\ b上拆分会保留空格,并且实际上还解决了一些特殊情况,例如在逗号上拆分。

下面是一些示例代码:

 def splitLen = 40
 def splitRegex =/\ b/
 def b =新的StringBuilder()

 originalString.split(splitRegex).each {s->
     如果(b.length()+ s.length()<= splitLen){
        //正在构建的字符串可以适合此子字符串。
         b。附录
     }其他{
        //正在构建的字符串无法适合此子字符串。
         output.addValue(b.toString())
         b.setLength(0)
         b。附录
     }
 }

 如果(b.length()> 0){
     output.addValue(b.toString())
 } 

我沿单词边界拆分原始字符串,然后遍历每个结果子字符串。 StringBuilder构建每个要输入到输出中的字符串。 有两种情况需要处理:

  1. StringBuilder可以适合当前的子字符串
  2. StringBuilder不能适合当前的子字符串

Sriprasad Shivaram Bhat 指出,代码当然应该包装在自定义函数中。

问候,

Morten

SAP小菜
2楼-- · 2020-09-07 07:07

嗨,阿努拉格。 如果您展示了到目前为止的尝试,将会有所帮助。 问候,莫滕

落灬小鱼
3楼-- · 2020-09-07 07:12

嗨,

您能尝试以下逻辑吗?

for(int i = 0; i

output.addValue(str.substring(i,Math.min(i +40,str.length())));

}

Nir深蓝
4楼-- · 2020-09-07 07:06

我将代码更新为简短一点:)

代楠1984
5楼-- · 2020-09-07 07:13

你好Anurag,

我看不到任何问题 您只需创建一个自定义函数,并确保目标字段的出现是0到无界。

 import com.sap.it.api.mapping。*;
 导入java.lang。*;

//添加输出参数以分配输出值。
 def void custFunc2(String []是,输出输出,MappingContext上下文)
  {
      def str = is [0];
      str = str.toString();
       对于(int i = 0; i  

生成的输出:

此致,

Sriprasad Shivaram Bhat

亦是此间程序员
6楼-- · 2020-09-07 06:55

嗨Anil。

此逻辑基本上将字符串截断为40个字符。

但我的要求是

我有一个长字符串,需要将其解析为长度不超过40个字符的字符串数组。 对于我来说,棘手的部分是确保正则表达式在40个字符之前找到最后一个空格,以使字符串之间清晰地分开,因为我不想切断单词。

jovirus
7楼-- · 2020-09-07 07:11

嗨,Sirprasad

它会拆分中间单词,这就是问题所在。

此致

Morten

一周热门 更多>