ByteBuffer 丢弃尾随换行符 [关闭]

Posted

技术标签:

【中文标题】ByteBuffer 丢弃尾随换行符 [关闭]【英文标题】:ByteBuffer discards trailing newline [closed] 【发布时间】:2020-07-22 05:50:31 【问题描述】:

这是我将字符串放入 ByteBuffer 的方式

String message="Hello\n\n";
ByteBuffer bresult = ByteBuffer.allocate(message.getBytes().length);
bresult.put(message.getBytes());
bresult.flip();

当我将字节缓冲区转换为字符串以查看结果时,\n\n 已从上述字符串中删除。 这就是我将 ByteBuffer 转换为 String 的方式

print(new String(bresult.array()));

结果是 Hello 没有任何换行符。 您可以在我的日志中的以下屏幕截图中看到结果 [![在此处输入图片描述][1]][1]

但是当我向像 message="Hello\n\n " 这样的 hello 字符串添加空格时,结果如下: [![在此处输入图像描述][2]][2] 如您所见,hello 字符串下有一些换行符。

【问题讨论】:

为什么我得到 (-1) 指向我的问题。我真的不知道答案,我现在得到的唯一答案是永远不要在 *** 中问任何问题,因为我会在我不知道的事情上得到负分。 您转换回String 以检查结果并查看其“错误”的代码部分在哪里?请发布完整 minimal reproducible example. 只有当您的问题不符合How to Ask 的要求时,您才会被否决,另请参阅help center。你不会因为你不知道某事而被否决。对我来说,在这里投反对票的一个正当理由是,不清楚你是如何确定有问题的,你只共享了一半的相关代码。所以帮助者不可能解释你的方法到底有什么问题。 您的问题被否决并不是对个人的侮辱。这意味着你的问题不是一个好问题。在这种情况下,你的问题是无法回答的。提供的示例中的任何内容都不会删除两个换行符,并且您不会显示其他代码;我也不能从给定的代码中重现问题。您需要提供minimal reproducible example。 感谢您的反馈,我认为现在格式正确 【参考方案1】:

我无法重现该问题。以下:

import java.nio.ByteBuffer;

public class App 

  public static void main(String[] args) 
    String str = "Hello\n\n";

    ByteBuffer buf = ByteBuffer.allocate(str.getBytes().length);
    buf.put(str.getBytes());
    buf.flip();

    String str2 = new String(buf.array());

    System.out.println(str.equals(str2));
    System.out.println(str2.endsWith("\n\n"));
  

给出这个输出:

true
true

这意味着从byte[] 创建的String 与原始String 具有所有相同的字符。

一些注意事项:

    上面ByteBuffer的使用是str2 = new String(str.getBytes())的一种迂回方式。我使用了ByteBuffer,因为这就是您在问题中使用的。

    小心String#getBytes()String#<init>(byte[])。两者都使用可能会或可能不会导致问题的默认平台编码。考虑明确指定编码。

    如果我用System.out.print(str2) 替换测试,我会得到以下输出:

    Hello
    
    

    那是“Hello”,后跟两个换行符。如果改为使用println,则将有三个换行符。请注意,换行符通常不直接可见。

【讨论】:

感谢您的回答,但请查看我的屏幕截图,如果需要任何额外信息,请告知。 确实我正在android studio上测试代码,我遇到了这个问题。 显示您描述的问题的屏幕截图表明环境与显示问题的屏幕截图略有不同。日志消息不同。我们需要minimal reproducible example 提供适当的帮助。 我已经编辑了我的问题,您可以在以下 URL 上看到它:***.com/questions/63074942/… 我得到了答案

以上是关于ByteBuffer 丢弃尾随换行符 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

svn:修订文件缺少尾随换行符

sql 清除换行符和尾随空格postgresql

从 fgets() 输入中删除尾随换行符

从 fgets() 输入中删除尾随换行符

jinja2如何删除尾随换行符

Bash:从输出中去除尾随换行符