ABAP--新语法--Data Processing--第三天--String Functions 字符串函数第一弹

使用表达式处理字符串数据

STRLEN ★

获取字符串长度,当字符串类型为 CHAR 时,尾部空格会被忽略,当字符串类型为 STRING 时,尾部空格不会被忽略,仍会按字符被计入长度内
例:
DATA(lv_strlen_c) = strlen( CONV char10( |1234567   | ) ).
DATA(lv_strlen_s) = strlen( CONV string( |ACDEFGH   | ) ).

测试结果:
在这里插入图片描述

DISTANCE

计算将 text1 改动成 text2 的最少操作次数,每次操作仅允许删除/添加/更改 1 个字符
MAX 参数用来限制最大操作次数,当最少次数大于 max 时,返回 max
例:
DATA(lv_distance) = distance( val1 = '123ABC'  val2 = '124AC' ).
DATA(lv_dis_max) = distance( val1 = '123ABC'  val2 = '124ACDE' max = 3 ). ” “这里最小操作次数为4,但规定了max = 3,所以输出值为3

测试结果:
在这里插入图片描述

FIND ★

搜索指定字符串并计算偏移量,没有遍历到时返回 1-
可以使用 SUB ( 固定文本 ) 或者 REGEX ( 正则表达式 ) 作为指定条件进行搜索
CASE = [ abap_true | abap_false ]:大小写检查,默认需要检查大小写。case = abap_true需要检查大小写,case = abap_false不需要检查大小写,case = ‘ ’为case = abap_false。
DATA(lv_find_sub)  =  find( val = 'ABA123CAD' sub = 'a' case = ' ')."不区分大小写,查找到第一个值,输出为0

测试结果:
在这里插入图片描述

OCC = N:指定字符串在第 N 次出现,当 N 是负数时,从字符串右边开始遍历
DATA(lv_find_sub1) =  find( val = 'ABA123CAD' sub = 'a' case = ' ' occ = 3 ).
"不区分大小写,搜索A第三次出现的位置,输出为7
DATA(lv_find_sub2) =  find( val = 'ABA123CAD' sub = 'a' case = abap_true occ = 3 ).
"区分大小写,搜索A第三次出现的位置。没有结果,输出为1-
DATA(lv_find_sub3) =  find( val = 'ABA123CAD' sub = 'a' case = abap_false occ = 1 ).
"不区分大小写,搜索A第一次出现的位置,输出为0
DATA(lv_find_sub4) =  find( val = 'ABA123CAD' sub = 'A'  occ = -3 ).
"若occ为负数,则从右边开始遍历,比如occ=-3,则从右边数第三个A,为左边数第一个A,偏移量为0 ,输出为0
DATA(lv_find_sub5) =  find( val = 'ABA123CAD' sub = '8' ).
"遍历不到,输出为1-
DATA(lv_find_sub6) =  find( val = 'ABA123CAD' sub = 'a'  occ = 3 ).
" 这里没有写case,默认case区分大小写,输出为1-

测试结果:
在这里插入图片描述

OFF = N  LEN = M:指定搜索区域,从第 N+1 为字符开始长度为 M 的范围
DATA(lv_find_reg)  = find( val = 'ABA123CAD' regex = '\d' off = 0 len = 3 ).
"从第一个字符开始,搜索3个字符,查找数值。未查找到,输出为1-,"\d"在正则表达式中是数字
DATA(lv_find_reg1)  = find( val = 'ABA123CAD' regex = '\d' off = 0 len = 6 ).
"从第一个字符开始,搜索六个字符,查找数字。第一个搜索出来的是1,偏移量为3,输出为3
DATA(lv_find_reg2) = find( val = 'ABA123CAD' regex = 'A' off = 0 len = 3 ).
"从第一个字符开始,搜索3个字符,查找A。偏移量为0,输出为0
DATA(lv_find_reg3) = find( val = 'ABA123CAD' regex = 'a' off = 0 len = 3 ).
"从第一个字符开始,搜索3个字符,查找a。未查找到a,输出为1-
DATA(lv_find_reg4) = find( val = 'ABA123CAD' regex = '123' off = 0 len = 6 ).
"从第一个字符开始,搜索6个字符,查找123。偏移量为3,输出为3

测试结果:
在这里插入图片描述

FIND_END

与 FIND 用法一致,但是偏移量会计算本身的长度
例:
DATA(lv_find_end_sub) = find_end( val = 'ABA123CAD' sub = 'A' occ = 3 ).
DATA(lv_find_end_reg) = find_end( val = 'ABA123CAD' regex = '\d+' ). "\d+"表示一个或多个数字组成

测试结果:
在这里插入图片描述

FIND_ANY_OF

搜索指定字符串中的任一字符并返回最小偏移量

FIND_ANY_NOT_OF

搜索非指定字符串中的任意字符并返回最小偏移量

以下两种表达式只能使用 SUB 指定文本,且始终区分大小写
例:
DATA(lv_find_any) = find_any_of( val = 'ABA123CAD' sub = '1B' ).
DATA(lv_find_any_not) = find_any_not_of( val = 'ABA123CAD' sub = '1B' ). 

测试结果:
在这里插入图片描述

COUNT ★

用法与 FIND 类似,但是返回值是指定字符串出现的次数,因此不能指定 OCC 参数

COUNT_ANY_OF

计算指定字符串中的任一字符出现的总次数

COUNT_ANY_NOT_OF

计算非指定字符串中任意字符出现的总次数

例:
DATA(lv_count) = count( val = 'ABA123CAD' sub = 'a' case = ' ' ).
DATA(lv_count_any) = count_any_of( val = 'ABA123CAD' sub = '1B' ).
DATA(lv_count_not) = count_any_not_of( val = 'ABA123CAD' sub = '1B' ).

测试结果:
在这里插入图片描述

CONTAINS

用法与 FIND 类似,用于判断包含关系,返回值为布尔型数据
当指定 START/END 时,直接从左侧/右侧比较对应长度的字符,用来判断首尾字符是否是sub中的字符,使用正则表达式时不可指定

CONTAINS_ANY_OF

判断是否包含指定字符串中的任一字符

CONTAINS_ANY_NOT_OF

判断是否包含非指定字符串中的任意字符,只有当sub里拥有全部val中的字符时,才会报false

可参照部分与操作符等效的表达式用法,如下图:在这里插入图片描述

例:
DATA(lv_contains) = xsdbool( contains( val = 'ABA123CAD' sub = 'a' case = ' ' ) ).
DATA(lv_contains_start) = xsdbool( contains( val = 'ABA123CAD' start = 'AB' ) ).
DATA(lv_contains_end) = xsdbool( contains( val = 'ABA123CAD' end = 'BD' ) ). 
DATA(lv_contains_any) = xsdbool( contains_any_of( val = 'ABA123CAD' sub = 'E' ) ).
DATA(lv_contains_not) = xsdbool( contains_any_not_of( val = 'ABA123CAD' sub = '1B' ) ). 
DATA(lv_contains_not1) = xsdbool( contains_any_not_of( val = 'ABA123CAD' sub = 'ABA123' ) )."true
DATA(lv_contains_not2) = xsdbool( contains_any_not_of( val = 'ABA123CAD' sub = 'ABA123CAD' ) )."false

测试结果:
在这里插入图片描述

XSDBOOL ★

将布尔型数据 true 转换为 abap_true,false 转换为 abap_false,返回值类型为 char1

REPLACE ★

替换字符串,可以指定位置进行替换,也可以查找指定字符串并替换
WITH = new 指定用于替换的字符串
OCC = N 指定字符串第 N 次出现时进行替换,N 为 0 时表示需要全部替换
其他参数可参照 FIND 表达式

例:
DATA(lv_replace) = replace( val = 'ABA123CAD' off = 0 len = 4 with = '@12@' ).
DATA(lv_replace_sub) = replace( val = 'ABA123CAD' sub = 'a' with = '@' case = ' ' ).
DATA(lv_replace_reg) = replace( val = 'ABA123CAD' regex = '\d' with = '#' occ = 0 ). 

测试结果:
在这里插入图片描述

INSERT ★

插入字符串,可以使用 OFF 指定插入的位置,默认为 0

例:
DATA(lv_insert) = insert( val = 'ABCD' sub = '123' off = 2 ). 

测试结果:
在这里插入图片描述

SPLIT

拆分字符串字符串,可以将字符串拆分开来

例:
  DATA: STRING(60),
      P1(20) VALUE '',
      P2(20) VALUE '',
      DEL(3) VALUE '***'.
STRING = ' Part 1 *** Part 2'.
SPLIT STRING AT DEL INTO P1 P2.
WRITE: /'P1:' , P1.
WRITE: /'P2:' , P2.

测试结果:
在这里插入图片描述

CONCATENATE

连接字符串,可以将字符串连接起来,如例1
SEPARATED BY 可以在字符间增加连接符,如例21:
DATA: C1(10)  VALUE  'Summer',
      C2(10)   VALUE  'holiday ',
      C3(30).
CONCATENATE C1 C2  INTO C3.

测试结果:
在这里插入图片描述

2:
DATA: C1(10)  VALUE  'Summer',
      C2(10)   VALUE  'holiday ',
      C3(30),
      SEP(3)  VALUE ' - '.
CONCATENATE C1 C2  INTO C3 SEPARATED BY SEP.

测试结果:
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值