gpt4 book ai didi

java - 如何保留从文件中读取的字符串的正确偏移量

转载 作者:行者123 更新时间:2023-11-29 03:44:51 24 4
gpt4 key购买 nike

我有一个包含以下文本的 text.txt 文件。

 Kontagent Announces Partnership with Global Latino Social Network Quepasa

Released By Kontagent

我将这个文本文件读入一个字符串 documentText。

documentText.subString(0,9) 给出了 Kontagent,这很好。

但是,documentText.subString(87,96) 在 Windows (IntelliJ Idea) 中提供 y Kontage,在 Unix 环境中提供 Kontagent。我猜它是由于文件中的空行而发生的(之后偏移量被搞砸了)。但是,我不明白为什么我会得到两个不同的结果。我需要在两种环境中获得一个结果。

为了将文件读取为字符串,我使用了这里讨论的所有函数 How do I create a Java string from the contents of a file? .但是,在使用任何功能后,我仍然得到相同的结果。

目前我正在使用这个函数将文件读入 documentText 字符串:

public static String readFileAsString(String fileName)
{

File file = new File(fileName);
StringBuilder fileContents = new StringBuilder((int)file.length());
Scanner scanner = null;
try {
scanner = new Scanner(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String lineSeparator = System.getProperty("line.separator");

try {
while(scanner.hasNextLine()) {
fileContents.append(scanner.nextLine() + lineSeparator);
}
return fileContents.toString();
} finally {
scanner.close();
}
}

编辑:有没有一种方法可以编写适用于 Windows 和 UNIX 环境的通用函数。即使文件以文本模式 复制。因为,不幸的是,我不能保证从事这个项目的每个人都将始终以二进制模式复制文件。

最佳答案

Unix 文件可能使用 native Unix EOL 字符:\n,而 Windows 文件使用 native Windows EOL 序列:\r\n。由于您的文件中有两个 EOL,因此存在 2 个字符的差异。确保使用二进制文件传输,所有字节都将被保留,所有内容将在两个操作系统上以相同的方式运行。

编辑:事实上,是在每个末尾附加操作系统特定 EOL (System.getProperty("line.separator")) 的人线。只需使用 Reader 将文件读取为字符数组,一切都会好起来的。或者使用 Guava 的方法为您完成:

String s = CharStreams.toString(new FileReader(fileName)); 

关于java - 如何保留从文件中读取的字符串的正确偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11475121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com