0

所以标题有点罗嗦,所以我会尝试更好地解释我的问题。

所以基本上这个程序要做的是,从一个文本文件中导入一个大的数字列表(排序如下):

3679       87
196        60
17914      12
18618      64
2370       65
... ...
etc. (for 45 more lines), 

然后将两列排序为两个不同的数组,然后按整数值对它们进行排序。左栏是商品 ID,右栏是库存数量。

到目前为止我已经尝试过:我尝试将整个列表变成一个字符串数组,然后我尝试将数组拆分为两个数组列表,并用每个逗号分隔它们。但我无法成功地做到这一点。此外,我尝试在 for 循环中执行此操作,它跳过逗号,只是将下一个值添加到两个不同的数组列表中。

这是我当前的代码:

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Store {

public static void main(String[] args) {

    // **************Scanner s = new
    // Scanner(input).useDelimiter("\\s*,\\s*");
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    ArrayList<Integer> ids = new ArrayList<Integer>();
    ArrayList<Integer> inventory = new ArrayList<Integer>();
    ArrayList<String> numbersString = new ArrayList<String>();
    try {
        int x = 0;
        int s = 0;
        Scanner in = new Scanner(new File("file50.txt"));
        in.useDelimiter(",");

        while (in.hasNext()) {// grabs all numbers in text file
            String f = in.next();
            numbersString.add(f);
            String toPrint = "";
            for (int i = 0; i < numbersString.size(); i++) {
                toPrint += numbersString.get(i) + " ";
            }

            String[] nums = toPrint.split("\\s+");
            // System.out.println(toPrint);
            System.out.print(Arrays.toString(nums));
            // System.out.print(nums);
        }

    } catch (Exception i) {

        i.printStackTrace();
    }

}
   }

如果有人可以帮助我并建议我应该做些什么来实现我的目标,将不胜感激。如果我仍然没有足够清楚地说明我正在尝试做什么,请告诉我。我会尽力解释

我不想复制和粘贴代码,只是想知道该怎么做。

谢谢

4

1 回答 1

1

首先,如果您的文本文件中的值用空格分隔,那么去掉in.useDelimiter(",");.

从文件中读取一行时的第二件事,使用String f = in.nextLine();而不是String f = in.next();

因此,现在您将读取文件中的每一行,ID 和库存项目用空格分隔。

现在,如果您想分别获取 ID 和库存商品,您可以这样做:

String[] tokens = f.split(" "); //splits the input by spaces

所以现在你有 IDtokens[0]和库存项目tokens[1];

因此,每次读取一行时,将其用空格分隔,然后您可以将 ID 添加到 ID 列表使用tokens[0],并将库存添加到库存列表使用tokens[1]

另一方面,我建议使用MapID 是键,库存项目是值,而不是使用多个列表。

所以像:

Map<String,String> map = new HashMap<String,String>();
map.put(tokens[0],tokens[1]);

如果String您不希望 ID 和库存项目为整数,则可以执行以下操作:

int ID = Integer.parseInt(tokens[0]);
于 2013-03-19T19:52:20.757 回答