首页 > 解决方案 > 如何扫描列表

问题描述

我正在尝试在 java 中创建一个方法,该方法将使用扫描仪读取列表字符串。我希望程序使用轮廓符“//s”逐字划分数组。我已经通过文本文件中的人名得到了每个数组,我只是想进一步划分数组,这样我就可以按那里的信息对它们进行排序(例如,如果他们有 f 代表女性,我就可以调用数组的特定部分使用 arrayList.get(index) 并按性别排序)这是我的代码:

抱歉不清楚,这是我的完整代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;



public class Filereader {

public static void replaceSlash(List<String> array) {



    for (int i = 0; i < array.size(); i++)
      {
        if (array.get(i).contains("-")) 
        {
            array.set(i, array.get(i).replace("-", "/"));
        }
      }

}

public static void split( List<String> array ) {

    Scanner scanner = new Scanner().useDelimiter("\\s");
    for (int i= 0; i < array.size(); i++) {
        while (scanner.hasNext()) {
            array.set(i, scanner.next());
        }

    }


}

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub


    System.out.println("Please type the name of the file you wish to sort: ");
    //get the name of the file
    Scanner scanner = new Scanner(System.in);
    File fileName = new File(scanner.nextLine());

    scanner = new Scanner(fileName).useDelimiter("\\s");
    List<String> annaK = new ArrayList<String>();
    List<String> martinaH = new ArrayList<String>();
    List<String> monicaS = new ArrayList<String>();


    while (scanner.hasNextLine()) {

        annaK.add(scanner.nextLine());
        martinaH.add(scanner.nextLine());
        monicaS.add(scanner.nextLine());


    }



    replaceSlash(annaK);
    replaceSlash(martinaH);
    replaceSlash(monicaS);

    split(annaK);



    System.out.println(annaK);
    System.out.println(martinaH);
    System.out.println(monicaS);

}
}

标签: java

解决方案


您可以为列表中的每个字符串制作一个扫描仪,然后循环遍历它

for (String a : array) {
     Scanner scanner = new Scanner(a).useDelimiter("\\s");
    while (scanner.hasNext()) {
        System.out.println(scanner.next());
    }

}

但是,a.split() 或者StringTokenizer比此处的扫描仪更有意义

除此之外,array.set将不起作用,因为您i为每个单独值中的多个单词分配相同的a值......这将导致仅将扫描字符串中的最后一个值分配给列表的该索引

如果您尝试将列表中的所有单词拆分为一个列表,那么您实际上需要创建并将值附加到单独的列表对象(不要修改您的参数,并且没有具有副作用的方法)


推荐阅读