使用Java8流(lambdas)将空间作为拆分添加到字符串
我正在编写一个Xor方法,它通过向字符串的字符中添加(作为Xor操作)随机值来对字符串进行加密。结果应类似于带有加密字符十六进制值的字符串 示例:使用Java8流(lambdas)将空间作为拆分添加到字符串,java,string,lambda,java-8,java-stream,Java,String,Lambda,Java 8,Java Stream,我正在编写一个Xor方法,它通过向字符串的字符中添加(作为Xor操作)随机值来对字符串进行加密。结果应类似于带有加密字符十六进制值的字符串 示例: StringBuilder sb = new StringBuilder(); inputText.chars() // get char stream .filter(c -> c != ' ') //
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();
“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)代码>
如何直接在流中格式化正确的结果?您需要的是将流中的元素收集到字符串中。这可以通过以下方式实现:
这样做的好处是:
- 无需使用
forEach
和修改外部对象
- 没有必要删除最后一个字符