我如何检查文本文件中的数据是否丢失,分隔符是否丢失或数据格式无效并向用户显示错误之处?

问题描述 投票:-3回答:2

我有一些Java代码,我正在其中尝试检查文本文件中的数据是否存在并且格式正确,并显示给用户。

我具有的代码如下:

public static void main(String[] args)
{
int itemcount = 0;
String line;
String input;
int i = 0;
String[] title = new String[20];
String[] author = new String[20];
String[] publisher = new String[20];
float[] price = new float[20];
int[] pages = new int[20];
String[] ISBN = new String[20];
int x = 0;


while (i == 0)
    {
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter the file name (with .txt):");
    input = scan.nextLine();
    File Fileobject = new File (input);
    try {
        Scanner FileReader = new Scanner (Fileobject);
        //FileReader.useDelimiter(" - ");

        // Read and display each line in the file
        while(FileReader.hasNextLine())
            {
            line = FileReader.nextLine();
            Scanner LineReader = new Scanner(line);
            LineReader.useDelimiter(" - ");
            //System.out.println(line);
            title[x] = LineReader.next();//STORES ALL ITEMS IN ARRAY
            author[x] = LineReader.next();
            publisher[x] = LineReader.next();
            price[x] = LineReader.nextFloat(); 
            pages[x] = LineReader.nextInt();
            ISBN[x] = LineReader.next();
            //System.out.println(line);
            System.out.println("-------------------------------------");
            System.out.print(String.format("%-15s", "Title:"));
            System.out.println(String.format("%-15s", title[x]));
            System.out.print(String.format("%-15s", "Author:"));
            System.out.println(String.format("%-15s", author[x]));
            System.out.print(String.format("%-15s", "Publisher:"));
            System.out.println(String.format("%-15s", publisher[x]));
            System.out.print(String.format("%-15s", "Price:"));
            System.out.println(String.format("%-15s", price[x]));
            System.out.print(String.format("%-15s", "Pages:"));
            System.out.println(String.format("%-15s", pages[x]));
            System.out.print(String.format("%-15s", "ISBN:"));
            System.out.println(String.format("%-15s", ISBN[x]));
            //System.out.println("-------------------------------------");
            i++;
            x++;
            }

        FileReader.close();
        }
    catch(FileNotFoundException e) 
        {
        System.out.println("File not found, please check and re-enter the name.");
        }
    }
}
}

从文本文件中获取数据,然后将其存储在数组中,然后从那里将其打印输出给用户。

我的典型输出是:

标题:OOP编程作者:格雷厄姆·温特发行人:O'Reilly价格:32.5网页:120ISBN:0471974555

标题:CCDA考试指南作者:安东尼·布鲁诺出版商:思科出版社价格:49.95网页:232书号:0735700745

标题:网络指南作者:塔玛拉·迪恩(Tamara Dean)发布者:课程技术价格:34.5网页:64ISBN:1439055661

标题:无线黑客作者:Rob Weeks发行人:O'Reilly价格:29.5网页:890ISBN:0596101442

标题:大型LAN作者:凯文·杜利发行人:O'Reilly价格:39.0网页:98ISBN:0596001509

标题:学习Java作者:威廉·莱恩发行人:Wiley价格:12.0网页:158ISBN:0072263445X

我想检查以下内容并将错误输出给用户:

检查书名是否缺失

检查作者是否失踪

检查发布者是否丢失

检查isbn是否丢失

检查分隔符是否丢失或错误

检查页面是否为数字

检查价格是否为数字

文本文件中的数据示例:

Learning Java - William Lane - Wiley - 12.00 - 158 - 0072263445X
- William Stalling -  Prentice Hall - 25.00 - 120 -  1304086641
OOP programming - Graham Winter - 32.50 - O'Reilly - 0471974555
Windows XP Unwired - Wei Meng Lee - 24.95 - O'Reilly - 0596005369

顺序应为:标题-作者-出版商-价格-页面-ISBN。

任何帮助将不胜感激。

编辑:

我尝试将try,catch语句添加到将数据添加到数组以尝试捕获InputMismatchExeptions的每个部分。我的程序似乎采用了文件的字面值,并在数组后面添加了空格。

这也不起作用。我了解代码可能会采用文件数据的原义。谁能指出我正确的方向来开始添加验证?我不要求这样做对我来说只是需要一些指导。

java arrays validation
2个回答
0
投票

我个人将使用String.isEmpty()来确定是否缺少书名或作者之类的东西。它返回一个布尔值,并检查字符串是否为空或null。

例如:

String line = LineReader.next();
if(!line.isEmpty()) {
    title[x] = line;
}

更多信息和示例在这里找到:https://www.javatpoint.com/java-string-isempty


0
投票

我知道的最简单的方法是将所有变量初始化为0。对所有数组进行循环,并检查0是否已更改,如果未返回false,则对每个未更改的元素返回true

for(int i=0; i<20; i++){ 
     if(title[i].equals(0))
        System.out.println("Empty Title");
}

依此类推。

© www.soinside.com 2019 - 2024. All rights reserved.