自从ABAP 7.40, SP08版本以来,ABAP引入了许多新的字符串操作语法,使得字符串处理更加简洁和高效。以下是一些新的字符串处理语法的总结:
1. 内联声明和字符串模板
内联声明的字符串操作
新的内联声明让代码更加紧凑和易读。
DATA(lv_string) = |Hello, { sy-uname }!|.
WRITE: / lv_string.
在这个例子中,lv_string
将会包含 Hello, <当前用户>!
。
2. 字符串截取
这个例子中,lv_substring
将包含字符串 ABAP
,因为它从第8个字符开始截取长度为4的子串。
DATA(lv_string) = 'Hello, ABAP!'.
DATA(lv_substring) = lv_string+7(4).
WRITE: / lv_substring.
3. 字符串长度
可以在操作中直接声明数据对象。
DATA(lv_string) = 'ABCDE'.
DATA(lv_length) = strlen( lv_string ).
WRITE: / lv_length.
4. COND 表达式
使用 COND
表达式来进行条件判断和赋值。
DATA(lv_age) = 18.
DATA(lv_status) = COND string( WHEN lv_age >= 18 THEN 'Adult' ELSE 'Minor' ).
WRITE: / lv_status.
5. SWITCH 表达式
SWITCH
表达式根据条件返回不同的值。
DATA(lv_grade) = 'A'.
DATA(lv_feedback) = SWITCH string( lv_grade WHEN 'A' THEN 'Excellent' WHEN 'B' THEN 'Good' WHEN 'C' THEN 'Average' ELSE 'Needs Improvement' ).
WRITE: / lv_feedback.
6. REDUCE 表达式
REDUCE
表达式用于对内表进行聚合操作。
DATA(lt_numbers) = VALUE int_table( ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ).
DATA(lv_sum) = REDUCE int( INIT sum = 0 FOR <number> IN lt_numbers NEXT sum = sum + <number> ).
WRITE: / lv_sum.
7. FILTER 表达式
FILTER
表达式用于从内表中过滤出满足条件的行。
DATA(lt_numbers) = VALUE int_table( ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ).
DATA(lt_even) = FILTER int_table( lt_numbers WHERE table_line MOD 2 = 0 ).
LOOP AT lt_even INTO DATA(lv_number).
WRITE: / lv_number.
ENDLOOP.
8. 字符串替换
使用内联函数REPLACE
使用REPLACE
函数可以替换字符串中的子字符串。
DATA(lv_string) = 'Hello, ABAP!'.
REPLACE ALL OCCURRENCES OF 'ABAP' IN lv_string WITH 'SAP'.
WRITE: / lv_string.
9. 检查字符串是否包含子字符串
使用内联函数FIND
使用FIND
函数可以检查字符串中是否包含某个子字符串。
DATA(lv_string) = 'Hello, ABAP!'.
IF contains( val = lv_string sub = 'ABAP' ).
WRITE: / 'String contains ABAP'.
ELSE.
WRITE: / 'String does not contain ABAP'.
ENDIF.
9. 去除空格
使用内联函数CONDENSE
使用CONDENSE
函数可以去除字符串中的多余空格。
DATA(lv_string) = ' Hello, ABAP! '.
CONDENSE lv_string.
WRITE: / lv_string.
10. 字符串大小写转换
使用内联函数TO_LOWER
和TO_UPPER
使用TO_LOWER
和TO_UPPER
函数可以将字符串转换为小写或大写。
DATA(lv_string) = 'Hello, ABAP!'.
DATA(lv_lower) = to_lower( lv_string ).
WRITE: / lv_lower.
DATA(lv_upper) = to_upper( lv_string ).
WRITE: / lv_upper.
11. SHIFT 左移字符串
DATA(lv_string) = 'Hello, ABAP!'.
SHIFT lv_string BY 2 PLACES LEFT.
WRITE: / lv_string.
12. SHIFT 右移字符串
DATA(lv_string) = 'Hello, ABAP!'.
SHIFT lv_string BY 3 PLACES RIGHT.
WRITE: / lv_string.
13. 去除字符串前导空格
DATA(lv_string) = ' Hello, ABAP! '.
SHIFT lv_string LEFT DELETING LEADING SPACE.
WRITE: / lv_string.
14. 去除字符串尾部空格
DATA(lv_string) = ' Hello, ABAP! '.
SHIFT lv_string RIGHT DELETING TRAILING SPACE.
WRITE: / lv_string.
15. 去除前导零
DATA: D1 TYPE N LENGTH 10 VALUE '1'.
DATA(D2) = |{ D1 ALPHA = OUT }|.
WRITE:D2.
16. 添加前导零
DATA: D1 TYPE C LENGTH 10 VALUE '1'.
DATA(D2) = |{ D1 ALPHA = IN }|.
WRITE:D2.