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

CMAX/CMIN

返回数个字符串中的最大值/最小值,最多可以有 9 个参数,比较规则:按 0 - 9A - Z,a - z 的顺序从小到大
例:
DATA(lv_cmax) = cmax( val1 = 'aABC' val2 = 'ZABC' val3 = '0123' ).
DATA(lv_cmin) = cmin( val1 = 'aABC' val2 = 'ZABC' val3 = '0123' ). 

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

CONDENSE ★

压缩字符串,默认会移除头部/尾部的空格,其他部分的空格都会被压缩至 1 位
DEL = del 指定需要删除的字符,指定后,从字符串两侧开始遍历并删除字符,直到出现非指定字符
FROM = from  TO = to  处理完 DEL 后,再遍历字符串,将 from 中出现的字符,替换成 to 的第一位字符
在遍历过程中,当同一个字符连续出现时,会被当成一个整体进行替换,所有字符均区分大小写
例:
DATA(lv_condense_space) = condense( |  This  is   test | ).

DATA(lv_condense) = condense( val  = '  XXThis ISSS X sTringXX'
                              del  = |X |
                              from = 'TS' 
                              to   = 'to' ). 

测试结果:(存在问题,第二个不是这样)
在这里插入图片描述

CONCAT_LINES_OF ★

将内表中所有的记录连接起来,通过 sep 指定分隔符
例:
DATA: lt_data TYPE TABLE OF char10.
lt_data = VALUE #( ( 'ABC' ) ( '123' ) ( 'DEF' ) ).
DATA(lv_concat_lines) = concat_lines_of( table = lt_data sep = '@' ). 

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

ESCAPE

基于规则转义特定字符,FORMAT 用于指定转换规则
例:
DATA(lv_escape_url) = escape( val    = 'http://www.google.com'
                              format = cl_abap_format=>e_url_full ).

DATA(lv_escape_string) = escape( val    = 'Special characters: |, \, {, }'
                                 format = cl_abap_format=>e_string_tpl ). 

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

MATCH ★

根据正则表达式匹配字符,如果在字符前后增加“.”,怎可以将字符前后的字符一起输出。
DATA(lv_match) = match( val = 'S1S2H3H4' regex = 'S.' occ = 2 ).   "S2,第二次出现的S,“.”是S后面的一个字符
DATA(lv_match1) = match( val = 'S1S2H3H4' regex = 'H...' occ = 1 ).  "H3H4
DATA(lv_match2) = match( val = 'S1S2H3H4' regex = 'H.' occ = 6 ).  "不出现值,因为没有第6H
DATA(lv_match3) = match( val = 'S1S2H3H4' regex = '1.' occ = 1 ).  "1S
DATA(lv_match4) = match( val = 'S1S2H3H4' regex = 'S' occ = 1 ).  "S

测试结果:

在这里插入图片描述

REPEAT

循环字符串 N 次
例:
DATA(lv_repeat) = repeat( val = 'ABC' occ = 5 ). 

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

REVERSE ★

字符串反转
例:
DATA(lv_reverse) = reverse( 'DEMO' ). 

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

TRANSLATE

按照指定规则替换字符,from 和 to 中的字符一一对应,没有对应关系的字符会被删除
如下例,Y对应AZ对应CB没有对应则被删除
DATA(lv_translate) = translate( val  = 'ABCDAB'
                                from = 'ACB'
                                to   = 'YZ' ). 

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

下例中,12都没有对应,则val中的12都被删除
data(lv_translate2) = translate( val = '1234511223'
                                 from = '12'
                                 to = ''"输出3453

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

TO_MIXED

处理大小写格式,首个字符大小写与 CASE 参数中的第一个字符一致,从第二个字符开始转换成小写
sep 符号(默认为 _ )后面的一个字符会被转换成大写,min 可以指定前 N 位中的 sep 符号不起作用
DATA(lv_to_mixed) = to_mixed( val = 'THIS is @A STRIN@G' sep = '@' case = 'X' min = 10 ).
"输出This is @a strinG
DATA(lv_to_mixed1) = to_mixed( val = 'THIS is A STRIN@G'  case = 'x' min = 10 ).
"输出this is a strin@g ,这里因为没有sep的值,所以后面的min也没有任何作用
DATA(lv_to_mixed2) = to_mixed( val = 'HEllo worLD' case = 'x').
"输出hello world
DATA(lv_to_mixed3) = to_mixed( val = 'HEllo w_orLD' sep = '_' case = 'x').
"输出hello wOrld
DATA(lv_to_mixed4) = to_mixed( val = 'HE_llo w_orLD' sep = '_' case = 'x' min = 2 ).
"输出heLlo wOrld
DATA(lv_to_mixed5) = to_mixed( val = 'HE_llo w_orLD' sep = '_' case = 'x' min = 3 ).
"输出he_llo wOrld
data(lv_to_mixed6) = to_mixed( val = '@HEllo worLD' sep = '@' case = 'x').
"输出@hello world,首字母当sep和case冲突的时候,以case为准
data(lv_to_mixed7) = to_mixed( val = '@HEllo worLD'  case = 'x' sep = '@').
"输出@hello world
data(lv_to_mixed8) = to_mixed( val = 'H@Ello worLD' sep = '@' case = 'x').
"输出hEllo world,要是sep生效,则生效的sep在输出中消失
data(lv_to_mixed9) = to_mixed( val = 'HE@llo worLD' sep = '@' case = 'x').
"输出heLlo world

测试结果:

在这里插入图片描述

FORM_MIXED

处理大小写格式,大小写与 CASE 参数中的第一个字符一致(默认大写),在转换前字符是大写的,会在该字符之前添加 sep 符号
DATA(lv_from_mixed) = from_mixed( val = 'This IS a string' )."输出THIS _I_S A STRING
DATA(lv_from_mixed1) = from_mixed( val = 'This IS a string' case = 'x' )."输出this _i_s a string
data(lv_from_mixed2) = from_mixed( val = 'hello worLD' )."输出HELLO WOR_L_D

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

TO_UPPER/TO_LOWER ★

将字符串转换成大写/小写
例:
DATA(lv_to_upper) = to_upper( val = 'this IS a string' ).
DATA(lv_to_lower) = to_lower( val = 'THIS IS A STRING' ). 

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

SHIFT_LEFT/SHIFT_RIGHT

将字符串左移/右移 N 位
指定 CIRCULAR 参数时,每次移除的字符需要被添加到另一侧
指定 SUB 参数时,如果 SUB 与字符串左侧/右侧部分字符完全匹配,则移除这些字符
例:
DATA(lv_left_places) = shift_left( val = 'ABCD’ places = 2 ).
DATA(lv_left_circular) = shift_left( val  = 'ABCD' circular = 3 ).
DATA(lv_left_sub) = shift_left( val = 'ABCD' sub = 'A' ).

DATA(lv_right_places) = shift_right( val = 'ABCD' places = 2 ).
DATA(lv_right_circular) = shift_right( val  = 'ABCD' circular = 3 ).
DATA(lv_right_sub) = shift_right( val = 'ABCD' sub = 'D' ). 

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

以下表达式可以用来截取字符串

SUBSTRING ★

从第 off + 1 位开始取长度为 len 的字符串,如果截取范围超出原有字符长度,会抛出异常CX_SY_RANGE_OUT_OF_BOUNDS

SUBSTRING_FROM

从指定文本 sub 或是正则表达式 regex 匹配到的字符串(包含本身)开始截取,默认截至最后一位
 len 指定长度,occ 指定出现次数,case 指定大小写检查,case = abap_true 检查大小写,case = abap_false不检查大小写
DATA(lv_substring_from) = substring_from( val = 'ABCDEFGH' sub = 'DEF' )."DEFGH
DATA(lv_substring_from1) = substring_from( val = 'ABCACBABC' sub = 'A'  len = 2 )."AB
DATA(lv_substring_from2) = substring_from( val = 'ABCACBABC' sub = 'A' occ = 2 )."ACBABC
DATA(lv_substring_from3) = substring_from( val = 'ABCaCABABC' sub = 'a' case = abap_true )."aCABABC
DATA(lv_substring_from4) = substring_from( val = 'AbBCbabBC' sub = 'B' case = abap_false ).
"bBCbabBC,case = abap_false时,不检查大小写
DATA(lv_substring_from5) = substring_from( val = 'ABCbabBC' sub = 'b' case = abap_false )."BCbabBC
DATA(lv_substring_from6) = substring_from( val = 'ABCaCaABABC' sub = 'a' len = 2 occ = 2 case = abap_true )."aA
DATA(lv_substring_from7) = substring_from( val = 'ABCaCaABABC' sub = 'A' len = 3 occ = 3 case = abap_true )."ABC

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

SUBSTRING_AFTER

从指定文本后一位开始截取,不包含本身
DATA(lv_substring_after) = substring_after( val = 'ABCDEFGH' sub = 'DEF' )."GH
DATA(lv_substring_after1) = substring_after( val = 'ABCDEFGH' sub = 'eF' case = abap_false  )."GH
DATA(lv_substring_after2) = substring_after( val = 'ABCDEFGH' sub = 'g' )."g不在字符中,所以没有数据

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

SUBSTRING_BEFORE

从第一位字符开始,截取到指定文本前一位,不包含本身
DATA(lv_substring_before) = substring_before( val = 'ABCDEFGH' sub = 'DEF' )."ABC
data(lv_substring_before1) = substring_before( val = '1234' sub = '34' )."12

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

SUBSTRING_TO

从第一位字符开始,截取到指定文本结束,包含本身
DATA(lv_substring_to) = substring_to( val = 'ABCDEFGH' sub = 'DEF' )."ABCDEF
data(lv_substring_to1) = substring_to( val = '12345' sub = '34' )."1234

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

SEGMENT ★

根据分隔符获取指定位置的字符串,可以用来拆分字符串,INDEX 用来指定位置,指定位置不存在时,会抛出异常 CX_SY_STRG_PAR_VAL
通过 SEP 指定的分隔符会被当做一个整体进行操作,当分隔符连续出现时,该位置会返回空字符串;
而通过 SPACE 指定的分隔符中,每个字符都会被视作单独的分隔符,且在分隔符连续出现时也不会单独返回空串
例:
DO.
  TRY.
      lv_sep = segment( val   = 'AB;CD ;EF ; ;GH'
                        index = sy-index
                        sep = ' ;' ).
    CATCH cx_sy_strg_par_val.
      EXIT.
  ENDTRY.
ENDDO. 

DO.
  TRY.
      lv_space = segment( val   = 'AB  CD - EF_GH'
                          index = sy-index
                          space = ' -_' ).
    CATCH cx_sy_strg_par_val.
      EXIT.
  ENDTRY.
ENDDO.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值