ABAP判断字符串是否包含某个值

在 ABAP 中判断字符串是否包含某个值,有以下几种方法:


一、常用方法对比

运算符/语句用途区分大小写支持通配符示例
CS包含字符串'ABC' CS 'B' → 真
CA包含任意字符'ABC' CA 'XB' → 真(含 B)
CP包含模式(模糊)是(* +'ABC' CP '*B*' → 真
CO仅包含(全匹配)'ABC' CO 'ABC' → 真
CN不包含'ABC' CN 'D' → 真
NA不包含任意字符'ABC' NA 'XYZ' → 真
NP不匹配模式'ABC' NP '*D*' → 真
FIND查找子串位置可选功能最强大
SEARCH查找子串是(*老语法

二、具体用法

1. CS(Contains String)最常用

判断字符串是否包含某个子串,不区分大小写。

DATA: LV_STR TYPE STRING VALUE '山纹樱桃柜身'.

IF LV_STR CS '樱桃'.
  WRITE '包含"樱桃"'.        " ← 会执行
ENDIF.

IF LV_STR CS '櫻桃'.
  WRITE '包含"櫻桃"'.        " ← 也会执行(不区分大小写)
ENDIF.

IF LV_STR CS '胡桃'.
  WRITE '包含"胡桃"'.        " ← 不会执行
ENDIF.

2. CA(Contains Any)包含任意字符

判断字符串中是否至少包含指定字符中的任意一个。

DATA: LV_STR TYPE STRING VALUE 'ABC123'.

IF LV_STR CA 'XYZ'.
  WRITE '包含X/Y/Z中的某个'.   " ← 不会执行
ENDIF.

IF LV_STR CA 'XBY'.
  WRITE '包含X/B/Y中的某个'.   " ← 会执行(含 B)
ENDIF.

3. CP(Contains Pattern)模式匹配

支持通配符:* 代表任意多个字符,+ 代表任意单个字符。

DATA: LV_STR TYPE STRING VALUE '山纹樱桃柜身'.

IF LV_STR CP '*樱桃*'.
  WRITE '包含"樱桃"'.        " ← 会执行
ENDIF.

IF LV_STR CP '山纹+'.
  WRITE '以"山纹"开头,后跟一个字符'.  " ← 不会执行(+只匹配一个字符)
ENDIF.

IF LV_STR CP '山纹*'.
  WRITE '以"山纹"开头'.      " ← 会执行
ENDIF.

注意CP 中的特殊字符(* + #)如果要在模式中当作普通字符,需要用 # 转义,如 ## 表示 #

4. FIND 语句(最灵活)

可以获取位置、区分大小写、正则表达式等。

DATA: LV_STR TYPE STRING VALUE '山纹樱桃柜身'.

" 基本查找
FIND '樱桃' IN LV_STR.
IF SY-SUBRC = 0.
  WRITE '找到了'.              " ← 会执行
ENDIF.

" 获取位置
FIND '樱桃' IN LV_STR MATCH OFFSET DATA(LV_OFF).
WRITE: / '位置:', LV_OFF.      " 输出:4(从0开始)

" 区分大小写
FIND '櫻桃' IN LV_STR IGNORING CASE.
IF SY-SUBRC = 0.
  WRITE '不区分大小写找到了'.
ENDIF.

" 正则表达式
FIND REGEX '樱.*' IN LV_STR.
IF SY-SUBRC = 0.
  WRITE '正则匹配成功'.
ENDIF.

5. SEARCH(老语法)

DATA: LV_STR TYPE STRING VALUE '山纹樱桃柜身'.

SEARCH LV_STR FOR '樱桃'.
IF SY-SUBRC = 0.
  WRITE '找到了'.
ENDIF.

" 支持通配符 *
SEARCH LV_STR FOR '*樱桃*'.

SEARCH 功能弱于 FIND,且 SAP 官方推荐用 FIND 替代。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值