从没有集合类的文本文件构建字符串数组



我正试图从缓冲的文本文件中构建一个数组。该类由另一个具有main方法的类使用。我所拥有的只是打印文件。。。我需要的是一个字符串数组,逐行构建,镜像文本文件。然后,我需要能够使用用户输入的字符串(该部分也将在主方法中)来搜索该数组,该字符串将命名产品,并找到相应的价格。我不能使用ArrayList、Maps、Vectors等。这是在Java8中。/***一个使用BufferedReader从vmMix1文本文件读取库存的类*@作者Michelle Merritt*/

import java.io.*;
public class VendingMachine1 
{
    BufferedReader inInvFile1 = new BufferedReader(
                 new FileReader("vmMix1.txt"))
/**
* A method to print vending machine 1 inventory
*/
    public void printVM1()
    { 
        try 
        {
            String vm1Line;
            while((vm1Line = inInvFile1.readLine()) != null)
            {
                // This is what I was using for now to simply print my file
                System.out.println(vm1Line);
            }
        }
        catch(IOException e)
        {
            System.out.println("I/O Error: " + e);
        }  
    }
}

这是创建文本文件的代码,因为我似乎看不到如何附加文本文件。/***创建自动售货机#1中的库存的类,使用*PrintWriter流。*@作者Michelle Merritt*/

import java.io.*;
public class VMMix1
{
public static void main(String[] args) 
{
    String [] product   = {"Coke", "Dr. Pepper", "Sprite", "RedBull", 
                           "Cool Ranch Doritos", "Lay's Potato Chips", 
                           "Pretzels", "Almonds", "Snickers", "Gummi Bears",
                           "Milky Way", "KitKat"};
    String [] packaging = {"bottle", "can", "can", "can", "bag", "bag",
                           "bag", "bag", "wrapper", "bag", "wrapper",
                           "wrapper"};
    float  [] price      = {2.25f, 1.75f, 1.75f, 2.00f, 1.00f, 1.00f, 0.75f, 1.50f,
                           1.25f, 1.00f, 1.25f, 1.25f};
    int    [] quantity   = {10, 10, 10, 12, 8, 10, 12, 9, 7, 11, 10, 8};
    try(PrintWriter outFile = new PrintWriter("vmMix1.txt"))
    {
        for (int index = 0; index < product.length; index++)
        {
            outFile.printf("%-18s %-10s: $%.2f  qty: %3dn", product[index], 
                            packaging[index], price[index], quantity[index]);
        }
    }
    catch (IOException except)
    {
        System.out.println("IOException: " + except.getMessage());
    }
}
}

我需要这个东西充满活力。随着程序的运行,购买了一些东西,我将不得不考虑库存的损失和自动售货机中的货币数量的变化(还有另一种货币类别,可以容纳大量面额的货币)。我必须维护数组中的值,并重新打印更新后的数组。非常感谢您的帮助。

您可以使用Java8流API

String[] array = reader.lines().toArray(String[]::new);

您甚至可以使用跳过缓冲区创建

try (Stream<String> stream = Files.lines(Paths.get("vmMix1.txt"))) {
        String [] array = stream.toArray(String[]::new);
}

在Java8之前,最短的方法之一可能是将整个文件读取为字符串,并将其拆分(将读取器读取为字符串的方法可以在这里找到):

String[] array = fileAsString.split('\n');

当然,您也可以在循环中构建数组,并使用System.arraypy为每一行增加数组(在这种情况下可能会很慢)。

String[] array = new String[0];
while((vm1Line = inInvFile1.readLine()) != null) {
   String[] newArray = new String[array.length + 1];
   System.arraycopy(array, 0, newArray, 0, array.length);
   newArray[array.length] = vm1Line;
   array = newArray;
}

您可以优化这种方法,首先创建一个更大的数组,填充行,根据需要增加数组的大小(使用arraypy),最后将数组缩小到写入的行数。这或多或少就是数组列表的作用。因此,如果您可能使用collections api,您可以简单地执行

List<String> list = new ArrayList<>();
while((vm1Line = inInvFile1.readLine()) != null) {
   list.add(vm1Line);
}
String[] array = list.toArray(new String[list.size()]);

希望它能有所帮助。

Stream<String> lines = Files.lines(Paths.get("C:/SelfStudy/Input.txt"));
String[] array = lines.toArray(String[]::new);

相关内容

  • 没有找到相关文章

最新更新