java - 读取带有换行符的转义字符的java文件

标签 java escaping bufferedreader unicode-escapes

我有一个 Unicode 文件需要导出到数据库 (Vertica)。列分隔符为CTRL+B,记录分隔符为换行符(\n)。每当列值中有换行符时,CTRL+A 用作转义符。

当我使用 BufferedReader.readLine() 读取此文件时,ID 为 2 和 4 的记录被读取为两条记录。而我想将它们作为输出中给出的单个完整记录来阅读。

这是示例输入文件。 |代表CTRL+B,^代表CTRL+A。

Input
ID|Name|Job Desc
----------------
1|xxxx|SO Job
2|YYYY|SO Careers^
Job
3|RRRRR|SO
4|ZZZZ^
 ZZ|SO Job
5|AAAA|YU

Output:
ID|Name|Job Desc
----------------
1|xxxx|SO Job
2|YYYY|SO Careers Job
3|RRRRR|SO
4|ZZZZ ZZ|SO Job
5|AAAA|YU

文件很大,所以我不能使用 StringEscapeUtils。对此有何建议?

最佳答案

您可以使用带有自定义定界符的扫描器。我使用的分隔符设置为匹配 \n \u0001\n (其中 \u0001 代表 CTRL+A):

try {
    PrintWriter writer = new PrintWriter("dboutput.txt");
    Scanner sc = new Scanner(new File("dbinput.txt"));
    sc.useDelimiter(Pattern.compile("^(?!.*(\\u0001\\n)).*\\n$"));
    while (sc.hasNext()) {
        writer.println(sc.next());
    }
    scanner.close();
    writer.close();
} catch (FileNotFoundException e) {
   e.printStackTrace();
} 

关于java - 读取带有换行符的转义字符的java文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29908236/

相关文章:

java - 代码在命令提示符中运行但不在 Eclipse 中运行

java - 在 Java 构建路径上找不到 "javax.servlet.http.HttpServlet"

java - 在 Java 中从 XML 中删除重复的命名空间

java - 仅当相同字符串出现两次时才匹配正则表达式

javascript - 我的 .html() 语法有什么问题?

bash - sed将字符串替换为单引号

java - 如何从Java文件中读取一行中的每个整数?

Java Webclient 发送 null 而不是类

mysql - Ansible 原始和引用

java ;文件输入输出中特定字符的换行