从文件读取字符存入LinkedList<Character>时如何保留空白字符
问题原因分析
- 最常见的原因是你使用的
fileReader.getText()方法本身做了额外的空白处理:多数文本读取工具类会默认trim行首尾空白,或是自定义实现中对每行调用了trim()方法,直接移除了行尾的空格。 - 你的代码还存在
LinkedList初始化无效的问题:先实例化了LinkedList,又用Collectors.toList()的返回值覆盖了该变量,而Collectors.toList()默认返回的是ArrayList实例,虽然这不是空格丢失的原因,但属于逻辑错误。
解决方案
- 首先验证原始读取结果是否包含空格,添加调试代码输出每个字符的ASCII值(空格的ASCII值为32):
text.chars().forEach(c -> System.out.printf("%c: %d%n", (char)c, c));
如果输出中没有值为32的条目,说明读取环节就丢失了空格,直接替换为Java原生读取逻辑即可完整保留所有字符:
// Java 11及以上版本可用 import java.nio.file.Files; import java.nio.file.Paths; import java.nio.charset.StandardCharsets; String text = Files.readString(Paths.get("myText.txt"), StandardCharsets.UTF_8);
低版本Java可以使用FileInputStream完整读取字节流后转字符串,避免工具类的额外处理逻辑。
- 修正集合收集逻辑,确保得到
LinkedList<Character>实例:
import java.util.LinkedList; import java.util.stream.Collectors; List<Character> characters = text.chars() .mapToObj(i -> (char) i) .collect(Collectors.toCollection(LinkedList::new));
- 如果调试发现原始
text中已经存在空格,说明问题出在遍历链表的逻辑中,检查遍历过程是否做了过滤、trim类的额外处理,移除相关逻辑即可。
内容的提问来源于stack exchange,提问作者Omegon
相关产品推荐
相关产品推荐

