提问人:byteit101 提问时间:2/28/2019 最后编辑:byteit101 更新时间:3/3/2019 访问量:62
字符串“chunk”对齐是否有名称?
Is there a name for string "chunk" justification?
问:
我最近实现了以下算法(为清楚起见而编写;有很多方法可以更紧凑地编写):
tmp = str.length % blocksize
if (tmp == 0)
tmp = blocksize
tmp = blocksize - tmp
str.append(padchar * tmp)
它保证字符串是 的倍数,根据需要填充。我发现自己经常实现它,以至于今天我再次实现了它,并意识到它必须足够普遍才能有一个专有名称或出现在一些常见的库中,但我从未见过或听说过它。这个例子是左对齐的,但我可以想象一个类似的右对齐变体。我在谷歌上搜索“块对齐”或“块对齐”的尝试一无所获。这不是标准的左对齐或右对齐,因为我见过的所有 api 都是固定长度,而这是半可变长度。str
blocksize
padchar
所以,我的两个问题:
- 这有更正式的名字吗?
- 此算法是否在任何语言标准库或通用实用程序中实现?
(请注意,尽管我在这个问题中使用了字符串,但该算法同样适用于通用列表/数组的答案,并且我对通用列表/数组的答案同样感兴趣)
输出示例:
> thisalgo(str="hey!", blocksize=5, padchar='0')
"hey!0"
> thisalgo(str="hello", blocksize=5, padchar='0')
"hello"
> thisalgo(str="hello!", blocksize=5, padchar='0')
"hello!0000"
答:
2赞
Lior Kogan
3/2/2019
#1
不确定单个名称,但涉及两个操作:
填充(左键、右键等 - 请参阅如何在 Java 中填充字符串?)
将长度四舍五入到下一个倍数
我将组合操作称为“Pad string to next multiple”,这非常直观,但不是“正确”的名称。
顺便说一句,这种组合操作在密码学中被广泛使用,简称为“填充”。
评论
1赞
aka.nice
3/3/2019
为什么不是一个专有名词???它似乎完美地表达了意图。aString.padToNextMultipleOf( blockSize )
0赞
Lior Kogan
3/3/2019
@aka.nice。我不确定 OP 所说的“专有名称”到底是什么意思。我认为 OP 的意思是标准/正式名称。
0赞
byteit101
3/3/2019
完全忘记了加密填充,这完美地回答了第二部分!@LiorKogan是的,这就是我的意思。编辑问题以澄清。
评论
Math.ceil(str.length() / blocksize) * blocksize
str.append(padchar * (blocksize - 1 - (str.length + blocksize - 1) % blocksize))