【问题标题】:How to output an string of ArrayList into a new file?如何将 ArrayList 的字符串输出到新文件中?
【发布时间】:2015-09-07 08:56:42
【问题描述】:

大家好,我有这个示例文本文件,其中人们的名字被粘在一起,它们之间没有任何空格。我是否可以将其放入缓冲读取器并创建一个 ArrayList 以将值存储在字符串中,然后按名称分隔字符串。

文本文件详情:

charles_luiharry_pinkertonarlene_purcellwayne_casanova

我的代码:

try {
    BufferedReader in = new BufferedReader(new FileReader(filename));
    String str;

    List<String> list = new ArrayList<String>();
    while ((str = in.readLine()) != null) {
        list.add(str);
    }
    String[] stringArr = list.toArray(new String[0]);

    FileWriter writer = new FileWriter("new_users.txt");
    for (String ss : list) {
        writer.write(ss);
    }
    writer.close();

} catch (IOException ioe) {
    ioe.printStackTrace();
}

预期输出:

charles_lui

harry_pinkerton

arlene_purcell

wayne_casanova

实际输出:

示例文件的副本。

【问题讨论】:

  • 为什么会有所不同?您的输入文件中只有一行。
  • 如果没有某种关于一个姓氏在哪里停止而另一个名字从哪里开始的指示,就不可能拆分名字。
  • 根据您对已接受答案的评论,这是否只是处理特定于操作系统的换行符的情况?例如。这些名称只是由\n 分隔,但是 Windows(例如记事本)让它看起来像是在一行中?

标签: java string arraylist


【解决方案1】:

只需为您的作者添加一个行分隔符:

writer.write(ss);
writer.write(System.lineSeparator());

如果您的操作系统有问题,请使用System.getProperty( "line.separator" )

【讨论】:

  • 你的意思是 "writer.write(ss+"\n");" ?
  • 谢谢乔迪!正是我需要的。
  • @Ulaga 您假设文件分隔符是 \n 在所有操作系统中都不正确,并且只要 OP 没有向我们提供此信息,请更好地使用建议的方法,该方法将在没有问题的情况下工作任何平台。 ;) 也...连接 Strings 有时是必要的,但在这种情况下看起来真的很难看。
【解决方案2】:

BufferedReader.readLine() 从输入中读取并返回以\n\r\n 结尾的行。它无法检测输入文件中名称之间的边界。更好地准备名称位于不同行的输入。

【讨论】:

    【解决方案3】:

    人类很难成功区分姓氏和名字的下一个名字,你怎么能指望计算机做到这一点?

    建议的解决方案 -

    1. 修改示例文件并在两个名称之间添加分隔符(例如“;”)。

    2. 通过连接文件中的所有行来创建一个冗长的字符串。连接时从行尾删除 '\n' 或 '\r\n'。 (可选 - 使用 StringBuffer 来提高性能)。

    3. 将该字符串拆分为“有效名称数组”。 这可以通过在长字符串上调用 split(';') 方法来完成,并将分隔符作为参数。

    4. 然后,从数组中打印。

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 2020-09-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2017-02-15
      相关资源
      最近更新 更多