文章目录
-
- 一、字符串的数据类型
- 二、声明与初始化
- 三、常用字符串操作
-
- [3.1 连接字符串](#3.1 连接字符串)
- [3.2 获取长度](#3.2 获取长度)
- [3.3 截取字串](#3.3 截取字串)
- [3.4 查找子串](#3.4 查找子串)
- [3.5 替换内容](#3.5 替换内容)
- [3.6 大小写转换](#3.6 大小写转换)
- [3.7 去除空格](#3.7 去除空格)
- [3.8 拆分字符串(按分隔符)](#3.8 拆分字符串(按分隔符))
- [3.9 合并内表为字符串](#3.9 合并内表为字符串)
- [3.10 字符串模板(STRING Temlates)-强大功能](#3.10 字符串模板(STRING Temlates)-强大功能)
- [3.11 字符串格式化](#3.11 字符串格式化)
- 四、总结与建议
在SAP ABAP中,字符串(String)是处理文本数据的核心数据类型之一。字符串(String)是一种动态长度的字符数据类型,用于存储文本信息。
一、字符串的数据类型
ABAP中常用的字符类型有:
| 类型 | 说明 |
|---|---|
| C | 固定长度字符串(e.g DATA lv_text(20) TYPE C.)C变量来保存字母数字字符,最少1个字符,最多65535个字符。默认情况下,它们左对齐。 |
| STRING | 动态长度字符串(推荐用于不确定长度的文本) |
| CHAR | 与C相同,是C的别名 |
| CLIKE | 通用字符类接口,用于泛型处理 |
推荐使用
STRING类型处理现代ABAP程序中的文本,因为它不会因长度限制而截断内容。
二、声明与初始化
ABAP
REPORT Z_GOYEER_01.
DATA my_Char(6) VALUE 'GOYEER'.
WRITE my_Char.
DATA: lv_str1 TYPE STRING,
lv_str2 TYPE STRING VALUE 'GOYEER',
lv_str3 TYPE STRING VALUE 'ABAP'.
WRITE / lv_str1.
WRITE / lv_str2.
WRITE / lv_str3.
三、常用字符串操作
3.1 连接字符串
ABAP
lv_str1 = 'GOYEER' && ' ABAP'. " 结果: 'GOYEER ABAP'
lv_str1 = |{ lv_str2 } { lv_str3 }|. " 字符串模板(推荐,可嵌入变量)
3.2 获取长度
ABAP
DATA(len) = strlen( lv_str1 ). " 返回字符数(Unicode 系统下)
3.3 截取字串
ABAP
" 偏移语法:从第0位开始取5个字符
DATA(sub) = lv_str1+0(5).
" 或使用内置函数
sub = substring( val = lv_str1 off = 0 len = 5 ).
3.4 查找子串
ABAP
FIND 'ABAP' IN lv_str1.
IF sy-subrc = 0.
WRITE: / 'Found!'.
ENDIF.
" 获取位置
FIND FIRST OCCURRENCE OF 'ABAP' IN lv_str1 MATCH OFFSET DATA(pos).
3.5 替换内容
ABAP
REPLACE ALL OCCURRENCES OF 'ABAP' IN lv_str1 WITH 'BTP'.
" 函数式写法(不可变,返回新字符串)
lv_str1 = replace( val = lv_str1 sub = 'ABAP' with = 'BTP' ).
3.6 大小写转换
ABAP
lv_str1 = to_upper( lv_str1 ). " 转大写
lv_str1 = to_lower( lv_str1 ). " 转小写
3.7 去除空格
ABAP
lv_str1 = trim( lv_str1 ). " 去除首尾空格
lv_str1 = condense( lv_str1 ). " 去除所有多余空格(中间多个空格变一个)
3.8 拆分字符串(按分隔符)
ABAP
DATA: lt_parts TYPE STANDARD TABLE OF string.
SPLIT 'A,B,C' AT ',' INTO TABLE lt_parts.
3.9 合并内表为字符串
ABAP
DATA(result) = concat_lines_of( table = lt_parts sep = ';' ).
3.10 字符串模板(STRING Temlates)-强大功能
ABAP
DATA: name TYPE string VALUE 'Alice',
age TYPE i VALUE 30.
DATA(msg) = |Hello, my name is { name } and I am { age } years old.|.
" 输出: Hello, my name is Alice and I am 30 years old.
3.11 字符串格式化
ABAP
|Price: { price CURRENCY = 'USD' NUMBER = '999,999.99' }|
四、总结与建议
- 不要用
C类型存储不确定长度的文本(易截断) - 避免对
STRING使用OCCURS或数组式访问(如str[1]无效)。 - 使用
strlen( )而非xstrlen( )(后者用于字节)。 - 在 Unicode 系统中,
STRING按字符处理,更安全。