java - 读取文本文件,然后列出数据集中的年份和排名

标签 java

这是我的文本文件,我想从中读取数据:

|RANK|  1950| 1994| 1998|
|   1|   JIN|  KIM| JOHN|
|   2|   JIM|  KIM|  RON|
|   3|  FRED|CRAIG|  JIN|
|   4|  JOHN| MARK|  DON|    

我想打开数据文件并提示用户输入上面的名称,然后程序可以从数据集中列出该名称的年份和排名。

这是我迄今为止使用 Netbeans 所做的事情:

import java.util.Scanner;
import java.io.FileNotFoundException;

public class JavaTask1 {
    public static void main(String[] args) {
        //file instance
        java.io.File file = new java.io.File("mynames.txt");

   try{

        Scanner input = new Scanner(file);
        //create scanner object
        Scanner in = new Scanner(System.in);
        System.out.print("Enter name:> ");

    String myname = in.nextLine(); //read user input



    String[] fullData;
    while(input.hasNext()){        

    //split data 
    fullData = input.next().split("\\|");

    ArrayList<String> yearList = new ArrayList<>();
    ArrayList<String> rankList = new ArrayList<>();
    //populate both arraylist from file        

   ArrayList<ArrayList<String>> matrix = new ArrayList<ArrayList<String>>();
   //Populate the matrix of names from file into matrix;


   for(int x=0; x<matrix.size(); x++)
for(int y=0; y<matrix.get(x).size(); y++){
    String currName = matrix.get(x).get(y);
    if(currName.equalsIgnoreCase(myname))
        System.out.println("Year (" + yearList.get(y) + ") Ranked " + rankList.get(x));
}               
    }

    }catch(FileNotFoundException e){
        System.out.println("Error the file cannot be found");
    }
}    

}

我希望程序输出如下:

Enter name: > John

Year (1998) Ranked 1

Year (1950) Ranked 4

我很困惑是否使用嵌套循环来循环每个数据或数组列表来存储每个数据,然后使用 if 语句输出它。请帮忙。

最佳答案

I'm confused on whether to use nested loops to loop through each data or arraylist to store each data then output it using if statement. Please help.

您可以像要求您通过二维数组搜索特定值来查找 X 和 Y 坐标一样对待这个问题。

如果行数和列数是任意的,您可以使用ArrayList的ArrayList来存储您的矩阵(数据)。但由于您的“坐标”是“排名”和“年份”而不是连续数字,因此您还需要存储排名和年份的值(以便于检索):

ArrayList<String> yearList = new ArrayList<>();
ArrayList<String> rankList = new ArrayList<>();
//populate both arraylist from file

然后使用ArrayList的ArrayList(也可以使用数组的数组)来存储数据矩阵:

ArrayList<ArrayList<String>> matrix = new ArrayList<ArrayList<String>>();
//Populate the matrix of names from file into matrix;

然后使用嵌套的 for 循环来迭代矩阵:

for(int x=0; x<matrix.size(); x++)
    for(int y=0; y<matrix.get(x).size(); y++){
        String currName = matrix.get(x).get(y);
        if(currName.equalsIgnoreCase(name))
            System.out.println("Year (" + yearList.get(y) + ") Ranked " + rankList.get(x));
    }

但是如果您使用的是ArrayList,则可以使用indexOf()通过搜索名称来获取索引,该名称允许您使用onefor循环:

for(int x=0; x<matrix.size(); x++){
    int yearIdx = matrix.get(x).indexOf(name);
    if(yearIdx >= 0)
        System.out.println("Year (" + yearList.get(yearIdx) + ") Ranked " + rankList.get(x));
}

关于java - 读取文本文件,然后列出数据集中的年份和排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56993016/

相关文章:

java - 如何将 Optional 转换为 OptionalInt?

java - 奇怪的路径会导致文件系统结构错误吗?

java - SpringData-MongoDB : No qualifying bean of type available

java - JAX-RS:如何将我的对象列表作为 JSON 返回?

java - 没有XML文件的DOM树数据结构

java - 为什么改造客户端在没有网络连接时会崩溃?

java - 如何检测鼠标是否已向右或向左移动(而不是拖动)?

java - 多个构造函数的替代方案

java - 使用 slf4j 禁用特定日志输出

java - 在 Java 中实例化 boolean 对象 : Boolean. TRUE 和 Boolean.FALSE 与基元