ABAP字符串字符计数替换异常:重复超10次显示*而非数字
ABAP字符统计替换问题修复
你的问题出在数值类型到字符串的自动转换格式限制:count默认是整数类型(I),在字符串模板中自动转换时,ABAP使用了默认的数值输出格式,当数值位数超过默认宽度时,会用*代替显示。
修复后的代码
DATA(input) = 'WWWWWWWWWWWWWWWWBWWBBBWWWWB'. DATA(count) = 1. DATA result TYPE string. DO strlen( input ) - 1 TIMES. DATA(lv_single1) = substring( val = input off = sy-index - 1 len = 1 ). DATA(lv_single2) = substring( val = input off = sy-index len = 1 ). IF lv_single1 = lv_single2. count = count + 1. ELSE. " 显式将count转换为字符串,避免自动格式限制 result = |{ result }{ COND #( WHEN count = 1 THEN '' ELSE string( count ) ) }{ lv_single1 }|. count = 1. ENDIF. ENDDO. " 同样处理最后一段字符的计数转换 result = |{ result }{ COND #( WHEN count = 1 THEN '' ELSE string( count ) ) }{ lv_single2 }|.
说明
- 使用
string( count )显式将整数类型的计数转换为字符串类型,绕过ABAP默认的数值输出格式限制,确保任意位数的计数都能正常显示。 - 也可以通过在字符串模板中指定数值格式实现:
|{ count WIDTH = 0 }|,效果一致,只需把string( count )替换为该格式即可。
对应你提供的输入字符串,修复后实际输出为16WB2W3B4WB;如果是12个W开头的输入,则会输出期望的12WB2W3B4WB。
内容的提问来源于stack exchange,提问作者Sefa_Kurtuldu
相关产品推荐
相关产品推荐

