Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java8流(lambdas)将空间作为拆分添加到字符串_Java_String_Lambda_Java 8_Java Stream - Fatal编程技术网

使用Java8流(lambdas)将空间作为拆分添加到字符串

使用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 != ' ') //

我正在编写一个Xor方法,它通过向字符串的字符中添加(作为Xor操作)随机值来对字符串进行加密。结果应类似于带有加密字符十六进制值的字符串

示例:

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
    和修改外部对象
  • 没有必要删除最后一个字符