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

4
当然,这个问题已经被讨论了成千上万次(1, 2, 3),但除了这个丑陋的片段之外,没有提供任何东西。
data: str type string value 'abcd#',
      len type i.

len = strlen( str ).
len = len - 1.
str = str+0(len).

有没有优雅的一行代码可以完成这个任务?目前我找到的唯一显著的方法是:
SHIFT str RIGHT DELETING TRAILING `,`.

然而,它需要你知道最后一个字符是什么(TRAILING掩码),而且掩码不支持正则表达式或通配符。或者我错了吗?
这种变体对我来说出了一些问题。
SHIFT string RIGHT BY 1.

也许有人知道更漂亮的语法来一行完成这个任务吗?ABAP 7.40或7.50中有什么新的东西吗?
2个回答

15

使用 SUBSTRING 函数获取字符串的最后一个字符:

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

字符串 str 将会变成 '#'

要删除字符串的最后一个字符(就像你的例子中一样):

str = substring( val = str off = 0 len = strlen( str ) - 1 ).

在ABAP编辑器中键入SUBSTRING并按下F1键,会出现更多变体(substring_after、substring_before等)。


-1
过去我用过的一个技巧:
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”的同一变体,甚至更长。虽然也是一个选项。 - Suncatcher
我的解决方案少了一条语句,因为你省略了最后一个字符的提取。因此这是最有效率的。 - Marius
PS:我关注ABAP语句计数,因为我为库组件编写最优代码。这总是在感知简单性和速度之间进行权衡。 - Marius
2
l_str 中的字符数越多,shift 越慢,而 substring 的速度不变。 - Sandra Rossi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接