截取包含中文字符串

strlen():只能计算包含英文字符串的长度,不能计算中文字符串的长度。

  • strlen(‘你好啊’) :输出长度为 3

cl_abap_list_utilities=>dynamic_output_length:计算的是字节数,可以获取精确长度。

  • 传入 field = ‘你好啊’,输出长度为 6
FUNCTION zotfm001.
*"----------------------------------------------------------------------
*"  IMPORTING
*"     VALUE(I_STRING) TYPE  STRING
*"     VALUE(I_STRLEN) TYPE  I
*"  EXPORTING
*"     VALUE(E_STRING1) TYPE  STRING
*"     VALUE(E_STRING2) TYPE  STRING
*"----------------------------------------------------------------------
DATA:lv_char TYPE string,
     lv_len  TYPE i,
     lv_st1  TYPE i,
     lv_st2  TYPE i,
     lv_str  TYPE i.
CHECK i_string IS NOT INITIAL AND i_strlen IS NOT INITIAL.
lv_str = strlen( i_string ).
DO.
  IF lv_str >= sy-index.
   lv_char = i_string+0(sy-index).
   CALL METHOD cl_abap_list_utilities=>dynamic_output_length
     EXPORTING
       field = lv_char
     RECEIVING
       len   = lv_len.
    IF lv_len >= i_strlen.
      e_string1 = lv_char.
      lv_st1 = strlen( lv_char ).
      lv_st2 = lv_str - lv_st1.
      e_string2 = i_string+lv_st1(lv_st2).
      EXIT.
    ENDIF.
  ELSE.
    e_string1 = i_string.
    e_string2 = ''.
    EXIT.
  ENDIF.
ENDDO.
ENDFUNCTION.