String 从字符串中删除/提取最后一个字符

String 从字符串中删除/提取最后一个字符,string,abap,String,Abap,当然,这个问题被讨论了数千次(,),但除了这段难看的片段外,什么也没有提供: data: str type string value 'abcd#', len type i. len = strlen( str ). len = len - 1. str = str+0(len). 有没有一款优雅的班轮可以做到这一点?到目前为止,我发现的唯一突出的方法是 SHIFT str RIGHT DELETING TRAILING `,`. 但是,它要求您知道最后一个字符是什么(尾部掩码

当然,这个问题被讨论了数千次(,),但除了这段难看的片段外,什么也没有提供:

data: str type string value 'abcd#',
      len type i.

len = strlen( str ).
len = len - 1.
str = str+0(len).
有没有一款优雅的班轮可以做到这一点?到目前为止,我发现的唯一突出的方法是

SHIFT str RIGHT DELETING TRAILING `,`.
但是,它要求您知道最后一个字符是什么(尾部掩码),并且掩码不支持regexp或通配符。还是我错了

由于某种原因,这种变体对我不起作用

SHIFT string RIGHT BY 1.

也许有人知道在一行中使用更漂亮的语法?ABAP7.40或7.50有什么新功能吗

获取字符串最后一个字符的子字符串:

DATA: str TYPE string VALUE 'abcd#'.
str = substring( val = str off = strlen( str ) - 1 len = 1 ).
str将为“#”

要删除字符串的最后一个字符(如示例中所示),请执行以下操作:


在ABAP编辑器中键入子字符串并点击F1,还有一些变化(后面的子字符串、前面的子字符串等)

我过去使用过的技巧:

DATA l_str TYPE string VALUE `abcd#`.

SHIFT l_str RIGHT by 1 PLACES CIRCULAR. " move last char to start, read it from l_str(1)
l_str = l_str+1. " remove it.

这与我提出的
SHIFT
几乎相同,甚至更长。不过,这也是一个选项。我的解决方案是少一条语句,因为您忽略了最后一个字符的提取。因此,这是最有效的。PS:我查看ABAP语句计数,因为我为库组件编写了最佳代码。它总是在简单性和速度之间进行权衡。
l_str
中的字符数越大,
shift
越慢,而
substring
速度不变。
DATA l_str TYPE string VALUE `abcd#`.

SHIFT l_str RIGHT by 1 PLACES CIRCULAR. " move last char to start, read it from l_str(1)
l_str = l_str+1. " remove it.