java以随机顺序读取文本文件列标题

java以随机顺序读取文本文件列标题,java,Java,我每天都收到一份文件: 刺是有界的吗 有5列或更多列 有3个公共列-lastName、firstName、address 问题:文件的列顺序定期更改 目标:打印lastName、firstName和address的列数据,而不考虑列顺序 我一直在使用以下代码并手动更改数据值以匹配列 testfile1.txt 1st day file format ID lastName address phone firstName 45 Gates

我每天都收到一份文件:

  • 刺是有界的吗
  • 有5列或更多列
  • 有3个公共列-lastName、firstName、address
问题:文件的列顺序定期更改

目标:打印lastName、firstName和address的列数据,而不考虑列顺序

我一直在使用以下代码并手动更改数据值以匹配列

testfile1.txt
1st day file format
ID  lastName    address         phone           firstName
45   Gates      111 some lane   777-888-9999    Bill

2nd day file format
address         ID  phone           firstName   lastName
111 some lane   81  444-555-1111    John        Doe
-


我想你可以试试下面的方法-

import java.io.BufferedReader;
import java.io.FileReader;

public class test2 {

    public static void main(String args[]) throws Exception {

        String dataFileName = "C:/testfiles/testfile1.txt";
        String line;
        boolean isFirstColumn = true;

        BufferedReader bReader = new BufferedReader(new FileReader(dataFileName));
        int[] order_Fname_Lname_Address = new int[3];

        while ((line = bReader.readLine()) != null) {

            String datavalue[] = line.split("\t");

            if(isFirstColumn) {
                for (int i = 0; i < datavalue.length; i++) {
                    switch (datavalue[i]) {
                    case "firstName":
                        order_Fname_Lname_Address[0] = i;
                    break;
                    case "lastName":
                        order_Fname_Lname_Address[1] = i;
                    break;
                    case "address":
                        order_Fname_Lname_Address[2] = i;
                    break;
                    }
                }
                isFirstColumn = false;
                continue;
            }

            String firstName = datavalue[order_Fname_Lname_Address[0]];
            String lastName = datavalue[order_Fname_Lname_Address[1]];
            String address = datavalue[order_Fname_Lname_Address[2]];

            System.out.println(lastName + " " + firstName + "," + address);
        }
        bReader.close();
    }
}
导入java.io.BufferedReader;
导入java.io.FileReader;
公共类test2{
公共静态void main(字符串args[])引发异常{
String dataFileName=“C:/testfiles/testfile1.txt”;
弦线;
布尔值isFirstColumn=true;
BufferedReader bReader=新的BufferedReader(新文件读取器(dataFileName));
int[]order_Fname_Lname_Address=新int[3];
而((line=bReader.readLine())!=null){
字符串数据值[]=行分割(“\t”);
if(isFirstColumn){
for(int i=0;i
这是第一种方法。我会这样尝试:

int colLastName, colFirstName, colAddress;
line = bReader.readLine();
String columnOrder []= line.split("\t");
for (int i=0; i< columnOrder.length; i++){
if (columnOrder[i].equals("lastName")){
  colLastName = i;
}
else if (columnOrder[i].equals("firstName"){
  colFirstName = i;
}
else if (columnOrder[i].equals("address"){
  colAddress = i;
}
}


    while ((line = bReader.readLine()) != null) {
        lineNumber++;
        String datavalue[] = line.split("\t");
        String lastName = datavalue[colLastName];
        String firstName = datavalue[colFirstName];
        String address = datavalue[colAddress];

        System.out.println(lastName + "'" + firstName + "," + address);

    }
int colLastName、colFirstName、colAddress;
line=bReader.readLine();
字符串columnOrder[]=行。拆分(“\t”);
for(int i=0;i
int colLastName, colFirstName, colAddress;
line = bReader.readLine();
String columnOrder []= line.split("\t");
for (int i=0; i< columnOrder.length; i++){
if (columnOrder[i].equals("lastName")){
  colLastName = i;
}
else if (columnOrder[i].equals("firstName"){
  colFirstName = i;
}
else if (columnOrder[i].equals("address"){
  colAddress = i;
}
}


    while ((line = bReader.readLine()) != null) {
        lineNumber++;
        String datavalue[] = line.split("\t");
        String lastName = datavalue[colLastName];
        String firstName = datavalue[colFirstName];
        String address = datavalue[colAddress];

        System.out.println(lastName + "'" + firstName + "," + address);

    }