原文:Small Fire · ABAP 字符串处理 · ABAP 子专栏 · Small Fire 技术笔记
字符串的处理在程序中的使用十分常见,在这里结合自己日常的使用对ABAP的字符串常用操作进行总结,以便后续使用。
1.获取字符串长度
var1 = strlen( str );将 str 作为字符数据处理,计算出其字符长度。
DATA:l_len type i,
str1(20) VALUE '1234'.
l_len = strlen(str1).
WRITE: len.
2.拼接字符串
将多个字符串拼接到指定的变量 Var 中,注意 Var 的长度。C、D、N、T数据类型的前导空格会保留,尾部空格会去掉,对 String 类型的所有空格都会保留。
CONCATENATE <str1> ... <strn> into <var> [SEPARATED BY <s>][RESPECTING BLANKS].
[SEPARATED BY <s>]:根据指定间隔符号 S 进行拼接,SPACE[RESPECTING xx]:针对C、D、N、T 数据,表示尾部空格会保留
3.压缩字符串
去除字段中的前后空格,并将字段中多个空格使用一个空格替换。
CONDENCE <str> [NO-GAPS].
- NO-GAPS:去除字段中的所有空格
4.截取字符串
- subtext = str+0(4):从最左边取出4个字符
- subtext = str+2(4):从第2个字符开始取出4个字符
- str+2(1) = ‘X’:变更字符串指定位置的值
5.查找字符串
在字符串中搜索子字符串,成功则 SY-SUBRC = 0。
SEARCH <var> FOR <str> <options>.
- str:可以使用正则表达式,也可以使用普通字符串
6.替换字符串
REPLACE <str1> WITH <str2> INTO <var> [LENGTH <l>].- 将str1在var中的字段替换为str2
- 如果指定长度,则只将str1中指定长度的字符替换为str2中的内容
- 如果替换后内容总长度超过var定义的长度,会出现截断现象
7.SHIFT 截断字符串
将字符串移动 n 个位置。去除字符串后面 0 时,可能会出现有空格的情况,需要压缩空格。
SHIFT <var> [BY <n> PLACES] [<mode>].
- [BY n PLACES]:按照给定位置数移动字符串,n为0或负数时字符串保存不变
- MODE:指定字符串截断的方向,LEFT(默认)、RIGHT、CIRCULAR(把左边的字符放到右边)
SHIFT <var> LEFT DELETING LEADING <str>.SHIFT <var> RIGHT DELETING TRAILING <str>.- 如果左边第一个字符串或则右边第一个字符串出现在 str 中,将字段移动相应的位置
8.拆分字符串
将字符串的值分配给具体变量
SPLIT dobj AT sep INTO {res1 res2......resn}.
将字符串的值分配给一内表
SPLIT s_source AT sep INTO TABLE itab
9.比较字符串
判断是否包含特定值
- IF field CN ‘0123456789’.
- IF field CN ‘ABCDEFG*’
- IF field CN ‘abcdefg*’
- IF field CN ‘/’ …..
| 表达式 | 表达式 |
|---|---|
| CN:Contains Not Only (包含,不仅包含) | CO:Contains Only(仅包含) |
| CS:Contains String (包含字符串) | NS:Contains No String (不包含字符串) |
| NP:No Pattern (不包含记号) | NA:Contains Not Only(不包含任何) |
| CA:Contains Any(包含任何) | CP:Covers Pattern (包含记号) |
10.大小写转换
TRANSLATE c TO UPPER|LOWER CASE.:将字符串转换为大|小写
11.字符前拼接空格
在 Grid ALV 上也显示空格:
IF <fw_output>-name2+0(1) eq space AND <fw_output>-name2 IS NOT INITIAL.
h_white = cl_abap_conv_in_ce=>uccpi( 160 ).
REPLACE ALL OCCURRENCES OF REGEX '\s' IN <fw_output>-name2 WITH h_white.
ENDIF.