Jerry自己写的ABAP处理中文字符的工具类
2023-09-14 09:02:49 时间
class ZCL_CHINESE_TOOL definition
public
final
create public .
public section.
type-pools ABAP .
types:
tt_post_attributes TYPE STANDARD TABLE OF crmt_soc_post_attr .
types:
tt_post_uuid TYPE STANDARD TABLE OF crmt_soc_data_uuid .
types:
tt_socialuserinfo type standard table of socialuserinfo .
class-methods CLASS_CONSTRUCTOR .
class-methods GET_FORMATTED_STRING
importing
!IV_FLAG type CRMT_SOC_UNICODE_FLAG optional
!IV_STRING type STRING
returning
value(RV_STRING) type STRING .
protected section.
private section.
types:
tt_sentit TYPE STANDARD TABLE OF crmc_soc_senti_t .
class-data SV_UNICODE_FLAG type CRMT_SOC_UNICODE_FLAG .
class-data ST_INVALID type STRING_TABLE .
class-data ST_CONTROL_FLAGS type STRING_TABLE .
class-methods IS_HEXDECIMAL
importing
!IV_STRING type CHAR4
returning
value(IS_HEXDECIMAL) type ABAP_BOOL .
class-methods IS_VALID_UNICODE_FLAG
importing
!IV_FLAG type CRMT_SOC_UNICODE_FLAG
returning
value(RV_VALID) type ABAP_BOOL .
ENDCLASS.
CLASS ZCL_CHINESE_TOOL IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_CHINESE_TOOL=>CLASS_CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
method CLASS_CONSTRUCTOR.
APPEND cl_abap_conv_in_ce=>uccp( 'p2d3' ) to st_invalid. "#EC NOTEXT
APPEND cl_abap_conv_in_ce=>uccp( '1234' ) to st_invalid. "#EC NOTEXT
DATA: it_taba TYPE STANDARD TABLE OF dd07v,
it_tabb TYPE STANDARD TABLE OF dd07v.
FIELD-SYMBOLS: <item> TYPE dd07v.
CALL FUNCTION 'DD_DOMA_GET'
EXPORTING
domain_name = 'CRM_SOC_UNICODE_FLAG'
langu = sy-langu
withtext = 'X'
TABLES
dd07v_tab_a = it_taba
dd07v_tab_n = it_tabb
EXCEPTIONS
illegal_value = 1
op_failure = 2
OTHERS = 3.
LOOP AT it_taba ASSIGNING <item>.
APPEND <item>-domvalue_l TO st_control_flags.
ENDLOOP.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_CHINESE_TOOL=>GET_FORMATTED_STRING
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_FLAG TYPE CRMT_SOC_UNICODE_FLAG(optional)
* | [--->] IV_STRING TYPE STRING
* | [<-()] RV_STRING TYPE STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
method GET_FORMATTED_STRING.
CONSTANTS: c_default TYPE CRMT_SOC_UNICODE_FLAG VALUE '\u'.
TYPES: BEGIN OF ty_pair,
unicode TYPE char4,
chinese TYPE char2,
END OF ty_pair.
DATA: lv_offset TYPE i,
lv_start TYPE i,
lt_match TYPE match_result_tab,
ls_match LIKE LINE OF lt_match,
lv_unicode TYPE char4,
lv_upper TYPE char4,
lt_chinese TYPE STANDARD TABLE OF ty_pair,
ls_pair TYPE ty_pair,
lv_len TYPE i,
lv_chinese TYPE crmt_soc_unicode_flag,
lv_replace TYPE char7,
lv_input TYPE string.
IF iv_flag IS NOT SUPPLIED.
sv_unicode_flag = c_default.
ELSEIF is_valid_unicode_flag( iv_flag ) = abap_false.
rv_string = iv_string.
RETURN.
ELSE.
sv_unicode_flag = iv_flag.
ENDIF.
FIND ALL OCCURRENCES OF sv_unicode_flag IN iv_string RESULTS lt_match.
IF sy-subrc <> 0.
rv_string = iv_string.
RETURN.
ENDIF.
lv_input = iv_string.
lv_len = strlen( lv_input ).
CLEAR: lt_chinese.
LOOP AT lt_match INTO ls_match.
lv_start = ls_match-offset + ls_match-length.
CHECK lv_len >= lv_start + 4.
lv_upper = lv_unicode = iv_string+lv_start(4).
TRANSLATE lv_upper TO UPPER CASE.
CHECK is_hexdecimal( lv_unicode ) = abap_true.
lv_chinese = cl_abap_conv_in_ce=>uccp( lv_upper ).
READ TABLE st_invalid WITH KEY table_line = lv_chinese TRANSPORTING NO FIELDS.
CHECK sy-subrc <> 0.
ls_pair-unicode = lv_unicode.
ls_pair-chinese = lv_chinese.
APPEND ls_pair TO lt_chinese.
ENDLOOP.
LOOP AT lt_chinese INTO ls_pair.
lv_replace = sv_unicode_flag && ls_pair-unicode.
REPLACE ALL OCCURRENCES OF lv_replace IN lv_input WITH ls_pair-chinese.
ENDLOOP.
rv_string = lv_input.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_CHINESE_TOOL=>IS_HEXDECIMAL
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_STRING TYPE CHAR4
* | [<-()] IS_HEXDECIMAL TYPE ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IS_HEXDECIMAL.
CONSTANTS: mask TYPE string VALUE '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.
IF iv_string CO mask.
is_hexdecimal = abap_true.
ENDIF.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_CHINESE_TOOL=>IS_VALID_UNICODE_FLAG
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_FLAG TYPE CRMT_SOC_UNICODE_FLAG
* | [<-()] RV_VALID TYPE ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IS_VALID_UNICODE_FLAG.
READ TABLE st_control_flags WITH KEY table_line = iv_flag TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
rv_valid = abap_true.
ENDIF.
endmethod.
ENDCLASS.
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关文章
- 正则表达式 – 去掉乱码字符/提取字符串中的中文字符/提取字符串中的大小写字母 – Python代码
- Capture One Pro 22 for Mac(RAW图像处理软件) v15.4.2.12中文直装版
- 虚拟仪器工程LabVIEW中文最新版,LabVIEW中文版安装教程下载
- Linux内核如何输出中文字符的方法示例
- 前端网页、php与mysql数据库字符编码(解决中文等乱码问题详解数据库
- Oracle正则表达式中文书写实战(oracle正则匹配中文)
- MySQL支持中文字符的使用(mysql中文字符)
- 第一届中文学生开源年会将于 5 月在电子科技大学举办
- w3m是一个基于文本的网页浏览器,支持多种操作系统,在命令行终端可以很好的支持中文。
- Neo4j:打破语言障碍的中文图数据库(neo4j中文)
- MongoDB如何支持中文字符?(mongodb中文字符)
- Mysql中文字符出错问题解决方案(mysql中文出错)
- 解决Linux命令行中文乱码问题(linux命令中文乱码)
- 如何在 MySQL 中进行中文字符判断?(mysql中文判断)
- 如何解决 MySQL 中文字符无法正常显示的问题?(mysql中文不显示)
- 中文SQLServer无法显示中文字符?(sqlserver不显示)
- Linux 中文文本统计之旅(linux 文本统计)
- 25字中文文章标题MySQL数据修改教程(mysql中修改数据指令)
- MySQL 数据库中的中文字符出现问号问题(mysql中中文是问号)
- MySQL不能储存中文字符解决方案简析(mysql中不能存中文吗)
- 数据库的使用中文标题使用jsp界面操作Oracle数据库(jsp界面与oracle)
- MySQL中文输入操作技巧(mysql下输入中文)
- 解决方法MySQL的中文编码设置(mysql 不能识别中文)
- MySQL数据库不支持中文字符的原因和解决方法(mysql不能有中文)
- 解决MySQL无法识别中文字符问题(mysql不能打中文字)
- 解决 MySQL 中文字符不显示问题(mysql不显示中文字符)
- 解决Oracle中文读取出现乱码问题(oracle中文读取乱码)
- Oracle中文编码字符最大长度研究(Oracle中文多少长度)
- Oracle中文提示号的解决方法(oracle中文出现 号)
- 学习Redis开拓海外市场学习如何获取中文字符(redis 获取字符中文)
- asp检测是否为中文字符函数
- Java完美判断中文字符的方法
- PHP实现通过中文字符比率来判断垃圾评论的方法