Java读取文件并将行拆分为数组以用于输出

时间:2014-02-22 03:10:00

标签: java input split output

我有一个看起来像这样的文本文件

 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函数并且还读入数组。你觉得怎么样?有人有经验吗?谢谢。

2 个答案:

答案 0 :(得分:2)

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

Soooooooo在这里看起来像:

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 Benjamin T Peter
  dg@tmich.edu Priya Goday

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

答案 1 :(得分:1)

既然你在征求意见......

  

我认为不好使用split函数并且还读入数组。你觉得怎么样?

使用split函数将行分成字段是一种可能性。另一种是使用Scanner。拆分功能也可用于将名称拆分为多个部分。

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


@GreySwordz有一个有效的观点。对于真实应用程序来说,将密码以明文形式存储在文件中是不良做法。但我怀疑这是一个练习......文件格式已被指定为其中的一部分。