10.[SAP ABAP] 字符串

文章目录

    • 一、字符串的数据类型
    • 二、声明与初始化
    • 三、常用字符串操作
      • [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 按字符处理,更安全。
相关推荐
snpgroupcn2 天前
能源行业SAP系统升级的技术约束分析:资产数据连续性与切换窗口的工程处理(上篇)
架构·sap
Harrison Ben5 天前
(原创)SAP FI自动入账奥义:FBKP FBKA FBKF
运维·sap·sap fico·sap运维·sap 实施
xiao贱贱5 天前
SAP ABAP OPEN SQL(应用实战大全)
sap·abap·opensql
爱喝水的鱼丶9 天前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
snpgroupcn10 天前
SAP ECC → S/4HANA 迁移的工程化路径:范围建模、规则复用与短停机窗口切换
sap·sap实施商
yang9822612 天前
S4 CLOUD
sap
爱喝水的鱼丶15 天前
SAP-ABAP:S/4 HANA ABAP 新特性入门:与 ECC ABAP 的核心差异、架构优势与学习路径规划
运维·数据库·性能优化·sap·abap·hana·开发交流
山茶花开时。19 天前
[SAP ABAP] SAP设置定时执行任务Job
sap·sap abap
SAP_LO19 天前
对检验批次做决策后物料状态并没有改变的处理方法
sap·aq11·bs02·检验批
SAP_奥维奥科技20 天前
云栖大会|奥维奥履约计划智能体获SAP行业AI共创优选方案
sap·云栖大会