【问题标题】:Java read a file and split lines into array for OutputJava读取文件并将行拆分为输出数组
【发布时间】:2014-02-22 03:10:00
【问题描述】:

我有一个像这样的文本文件

 respondentid |              name              |        email        | password | michid 
-------------+--------------------------------+---------------------+----------+--------
 bi1004       | Malapa          Bushra         | bi@tmich.edu  | ec59260f |       
 bm1252       | Peter Benjamin T               | bm@tmich.edu  | 266bff7c |       
 dg1988       | Goday   Priya                  | dg@tmich.edu  | dongara  |       

我只需要打印出电子邮件和姓名。但是姓名是逆序的,包括中间名首字母。我如何处理逆序和中间名首字母?例如我的打印输出将是

bi@mich.edu  Bushra Malapa
bm@mich.edu  Benjamin T Peter

我想我会使用 split 函数并读入数组。你们怎么看?有人有这方面的经验吗?谢谢你。

【问题讨论】:

  • “我想我不适合使用 split 功能...” 这样做,如果你有任何问题,那么你可以在这里问
  • 我认为最简单的方法是一次读取整行,然后将其按| 拆分为字段,另外按空格拆分名称字段。
  • 从您提供给我们的有限代码来看,您似乎将密码存储在文件中,这确实是个坏主意。

标签: java input split output


【解决方案1】:

这是我要做的:我会跳到第 3 行,然后使用 split 函数在每个“|”处拆分行并将第二个和第三个值存储为名称和电子邮件。然后我们取名字,每次有任意数量的空格时对其进行拆分,并根据有多少部分重新排列它,要么是 First Middle Last 要么是 First Last 。然后我们将其与电子邮件并排打印。

这就是它的样子:

import java.io.*;
public class temp {
    public static void main(String[] args) {
        // define the path to your text file
        String myFilePath = "temp.txt";

        // read and parse the file
        try {
            BufferedReader br = new BufferedReader(new FileReader(new File(myFilePath)));
            String line, name, email;
            // read through the first two lines to get to the data
            line = br.readLine();
            line = br.readLine();
            while ((line = br.readLine()) != null) {
                if (line.contains("|")) {
                    // do line by line parsing here
                    line = line.trim();
                    // split the line
                    String[] parts = line.split("[|]");
                    // parse out the name and email
                    name = parts[1].trim();
                    email = parts[2].trim();
                    // rearrange the name
                    String[] nParts = name.split("  *");
                    if (nParts.length == 3) {
                        name = nParts[1] + " " + nParts[2] + " " + nParts[0];
                    } else {
                        name = nParts[1] + " " + nParts[0];
                    }
                    // all done now, let's print the name and email
                    System.out.println(email + " " + name);
                }
            }
            br.close();
        } catch (Exception e) {
            System.out.println("There was an issue parsing the file.");
        }
    }
}

如果我们继续使用您在此处提供的示例文件运行它,我们将得到:

bi@tmich.edu Bushra Malapa
bm@tmich.edu 本杰明·T·彼得
dg@tmich.edu Priya Goday

希望这对您有所帮助!我绝对鼓励您也找到自己的方法来解决问题,因为有很多不同的方法可以解决问题,找到一种对您有意义的方法是件好事。另外正如指出的那样,您绝对不应该以纯文本形式存储密码。

【讨论】:

    【解决方案2】:

    既然你在征求意见...

    我想我会使用 split 函数并读入数组。大家觉得呢?

    使用 split 函数将行分隔为字段是一种可能性。另一种是使用扫描仪。 split 函数也可用于将名称拆分为多个部分。

    将内容读入数组是一个坏主意,因为您需要事先知道数组需要多大......而且一般来说没有办法知道这一点。请改用List


    @GreySwordz 有一个有效点。 真正的应用程序将密码明文存储在文件中是不好的做法。但我怀疑这是一个练习......并且文件格式已被指定为其中的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-01
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      相关资源
      最近更新 更多