【发布时间】:2015-10-24 11:33:33
【问题描述】:
我正在编写一个 Xor 方法,该方法通过向其字符添加(作为 xor 操作)随机值来加密某些字符串。结果应该看起来像带有加密字符的十六进制值的字符串。
示例:
"Hello world" => "0006F 00046 00066 00076 0004D 0007F 00047 0007D 00062 0006E"
代码:
StringBuilder sb = new StringBuilder();
inputText.chars() // get char stream
.filter(c -> c != ' ') // remove spaces
.map(c -> c ^ random.nextInt(randBound)) // do xor for each char
.boxed() // to Integer stream
.map(i -> String.format("%05X ", i & 0xFFFFF)) // to Hex String values
.forEach(sb::append);
if (sb.length() > 0)
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
如您所见,我已将结果格式化为"%05X ",因此字符串末尾有多余的空格。并且需要使用sb.deleteCharAt(sb.length() - 1);。
如何直接在流中格式化正确的结果?
【问题讨论】:
标签: java string lambda java-8 java-stream