【问题标题】:Convert ArrayList<String> With Quotes Read from an external txt file to ArrayList<String> Without the Quotes Using Java 8使用 Java 8 将带有引号的 ArrayList<String> 从外部 txt 文件读取转换为不带引号的 ArrayList<String>
【发布时间】:2020-06-20 17:31:24
【问题描述】:

我正在尝试从文本文件中读取大行引号中的单词,例如“DSRD”、“KJHT”、“BFXXX”、“OUYTP”,这样我就可以得到类似 [DSRD, KJHT, BFXXX, OUYTP ].

我已经尝试了下面这两个代码,但仍然返回带引号的行:

   1. List<String> lines = Files.readAllLines(Paths.get(filePath), ENCODING);
   2. List<String> lines = new ArrayList<>(Files.readAllLines(Paths.get(filePath)));

有没有一种方法可以只返回字符串列表,而每个字符串中没有引号?

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 为什么不按原样阅读并自己处理引文呢?您可以去掉引号并转换文本。
  • 在线应用正则表达式是否昂贵?或者你可以在按字符读取文件时进行修改。
  • 如果您知道每个字符串都有引号,我想您每次都可以将子字符串从 0 带到 s.length() - 1,但正如 Qunata 所说,您可以保持原样并稍后处理

标签: java


【解决方案1】:

您可以在阅读文件后使用String#replaceAll 删除引号:

List<String> lines = Files.readAllLines(Paths.get(filePath), ENCODING);
lines = lines.stream().map(s -> s.replaceAll("\"", "")).collect(Collectors.toList());

【讨论】:

  • 获取子字符串不是更容易吗? replaceAll 将遍历整个字符串
  • @user 如果他读取列表中的整个文件,性能可能不是他的问题。性能优化之前的可读性存在疑问。
【解决方案2】:

您可以将用逗号分隔的单词拆分并对其应用转换,最后将它们重新连接起来:

for(int i = 0; i < lines.size(); i++) {
    String line = lines[i];
    String[] words = line.split(",");

    for (int j = 0; j < words.length; j++) {
        words[j] = words[j].replaceAll("^\"|\"$", "");
    }
    
    lines[i] = String.join(",", words);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 2012-08-31
    • 2011-08-20
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多