Java 如何将存储在文本文件中的数据读入数组,然后对该数据进行排序并存储

Java 如何将存储在文本文件中的数据读入数组,然后对该数据进行排序并存储,java,arrays,sorting,file-io,Java,Arrays,Sorting,File Io,我有一个包含10行的文本文件。每行有10个元素,由逗号分隔,这些元素已按行排序,如: 3463,34957,44443,50481,71036,73503,74289,76671,82462,92527 1456,2731,18159,20440,32962,38562,49321,64220,67615,72541 1073,6217,9695,27372,30624,38021,47851,68479,76834,88021 7930,11882,17681,27267,32131,4509

我有一个包含10行的文本文件。每行有10个元素,由逗号分隔,这些元素已按行排序,如:

3463,34957,44443,50481,71036,73503,74289,76671,82462,92527
1456,2731,18159,20440,32962,38562,49321,64220,67615,72541
1073,6217,9695,27372,30624,38021,47851,68479,76834,88021
7930,11882,17681,27267,32131,45096,59008,69156,72843,94146
2381,4359,30194,40730,73714,74721,75127,78830,86753,89475
1466,21335,21369,23342,36973,50888,67891,78069,90346,99970
15015,16628,21012,25483,42387,42519,45472,49552,57193,71449
1751,8833,35433,39972,44475,47604,51601,59108,87957,94764
10728,17248,31885,41453,41479,54785,81400,83554,86014,87105
228,9479,25187,50956,70720,71878,78744,84341,86637,88225
现在我想在不影响行顺序的情况下对这100个元素进行排序(即:最小的数字(228)应该在第一个位置,最大的数字(99970)应该在最后一个位置,我需要将这些完全排序的数字存储到另一个文件中

我面临的问题是在数组中添加这些数字,然后我想知道如何对这些数字进行排序。限制是每次RAM中的元素不应超过10个

我已经开始为此编写一些代码,以便从文件中获取数据:

public static void main(String args[])
{
    File file = new File("SortedLines.txt");
    FileInputStream fis = null;
    String st;
    try 
    {
        fis = new FileInputStream(file);

        int content;
        while ((content = fis.read()) != -1) 
        {
            // convert to char and display it
            System.out.print((char)content);
        }
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    } 
}
对于每行:

  • 将从文件中读取的字符串按“
    ”和“
  • 创建一个
    新整数[splittedString.length]
    ,迭代字符串数组,使用
    Integer.parseInt(..)
    从该字符串创建一个
    Integer
    ,并将其放置在所创建的
    Integer[]的适当位置。
  • 调用
    Arrays.sort(..)
    ,使用创建的数组

  • 如果要排序的数字的顺序与上面提到的相同,则可以简单地使用array.sort():

    • 创建一个包含所有数字的数组(我知道这些是整数),比如说
      myUnsortedArray

    • 调用
      Arrays.sort(myUnsortedArray)

    这将完成对数组进行排序的工作,然后您可以按照您想要的方式对其进行转换


    希望这能有所帮助。

    以上对答案的评论似乎稍微改变了这里的问题。您将问题陈述如下:

    在现实中,我有一个文件,1000个条目中包含100万个条目 *1000个矩阵形式,一次RAM中的元素不能超过10000个

    然后:

    “给你一百万个数字,你必须找到第100个 最小数量。“问题约束:不超过10000个元素” 一次可以在RAM中

    我建议你编辑你的原始问题来反映这个问题——如果这真的是你试图解决的最终问题的话

    我对你的问题的理解是:你必须从1000*1000矩阵中找出第100个最小的数字(请注意:这与说你有100万个数字是完全不同的),限制是内存中最多只能保存10.000个数字。如果我是对的,一个可能的解决方案可能是:

  • 将一个矩阵行作为数组加载到内存中,我们称之为
    minValues
  • 按照前面的建议,使用
    Arrays.Sort()
    对其进行排序
  • 将最低值和最高值保留在临时变量中,让我们称它们为
    a
    b
  • 对于后续行的每个值,我们将其称为x,检查
    a
    。如果是这种情况,请将值插入
    minValues
    。这将自然地将最后一个元素从数组中挤出,因此您必须更改
    b
    的值
  • 在所有迭代结束时,
    minValues
    将包含矩阵中最小的100个元素,只需选择最后一个元素(即
    b
    ),这将是您的第100个最小元素
  • 您可以使用任何值(例如,如果您需要最小的第157个元素)对该方法进行参数化,并且内存占用为

    100个元素(对于
    MinValues
    )+1000个元素(下一行) 检查)+2(
    a
    b
    )=1102个元件

    仍然远低于10.000个元素的最大限制。速度方面的性能可能不是很好,但这一要求并不在计划之内——而且,在内存要求很低的情况下处理大量数据时,您确实需要牺牲一些性能

    我很想听到一个更好的实现目标的方法

    编辑:我建议您也检查一下。它在O(K)时间内解决了问题,其中K是紧随其后的元素(在您的情况下为100)。但不确定内存占用


    希望这能有所帮助。

    您所说的“不干扰行顺序”是什么意思你对此的解释毫无意义。你的意思是要对每一行分别排序吗?没有行已经排序。实际上,我需要对该文件中的每一个数据元素进行排序。排序后,每一行应该正好包含10个元素。因为在我的输入文件中,一行中最初有10个元素。很抱歉,我的英语不好。问题是真实的我有一个1000*1000矩阵形式的文件,包含100万个条目,一次在RAM中不能超过10000个元素。这是我的问题陈述“你有一百万个数字,你必须找到第100个最小的数字。”问题约束:一次RAM中的元素不能超过10000个我正在使用文件来实现这一点,但不幸的是,我不擅长使用文件handling@HarpreetSingh如果这是你真正的问题,你应该问这个。如果你有一个解决方案,那么请提供给我,我已经解决了几乎一半的问题,现在我是斯图卡n请编写一个代码。我是JAVA新手。只需编写代码,将数据元素添加到整数数组中,同时跳过其中的数据元素。能否请您首先告诉我如何将数据元素从文件存储到字符串数组