简体   繁体   中英

Exception in thread "main" java.lang.NumberFormatException: For input string: " 38"

For an assignment I have almost ready but can't seem to get past the error .. the file items.txt data

12345,Ballpeen Hammer,25,18.75

56789,Phillips Screwdriver,120,10.95

24680,Claw Hammer,35,15.98

13579,Box Wrench,48,20.35

28967,Hex Wrench,70,19.98

the file activity.txt data

D,12345,0

R,12345,100

S,12345,45

The error i am getting again and again it tells me the error

                       Exception in thread "main" java.lang.NumberFormatException: For input string: " 38"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:569)
at java.lang.Integer.parseInt(Integer.java:615)
at InventoryItemTest.main(InventoryItemTest.java:21)

C:\\Users\\Noah\\AppData\\Local\\NetBeans\\Cache\\8.2\\executor-snippets\\run.xml:53: Java returned: 1 BUILD FAILED (total time: 0 seconds)

The code that is not working

    import java.io.*;
    import java.text.NumberFormat;
    import java.time.format.DateTimeFormatter;
    import java.util.Calendar;
    import java.util.Scanner;

     public class InventoryItemTest {
     private static final int INVENTORY_SIZE=100;
     public static void main(String[] args)
            {
               InventoryItem[] inventoryItems= new 
               InventoryItem[INVENTORY_SIZE];
                        int i= 0;
                 //Process the file
                 try {
                                                                                          Scanner scanfile = new Scanner(new File("items.txt"));

        while (scanfile.hasNextLine())
        {
            String[] lines = scanfile.nextLine().split(",");
            if(Integer.parseInt(lines[0])>=20000 && Integer.parseInt(lines[0])<=79999) { 
                inventoryItems[i] = new InventoryItem(Integer.parseInt(lines[0]), lines[1], Integer.parseInt(lines[2]), Double.parseDouble(lines[3]));
                i++;
           }
        }
        System.out.println(i+" items has been created.");
        scanfile.close();
    }
    catch (FileNotFoundException ex)
    {
        System.err.println("FILE NOT FOUND!!!!");
    }

    try
    {
        int processedCount=0,skippedCount=0;
        Scanner scanFile = new Scanner(new File("activity.txt"));

        while (scanFile.hasNextLine())
        {
            String[] tokens = scanFile.nextLine().split(",");
            int id = Integer.parseInt(tokens[1]);
            System.out.println(id);
            int q = Integer.parseInt(tokens[2]);
            for (int j = 0; j <i ; j++) {
                if(id==inventoryItems[j].getItemNumber())
                {
                    processedCount++;
                    switch (tokens[0])
                    {
                        case "D":
                            inventoryItems[j].setQuantity(q);
                            break;
                        case "R":
                            inventoryItems[j].receiveItems(q);
                            break;
                        case "S":
                            inventoryItems[j].shipItems(q);
                            break;
                    }
                }
                skippedCount++;
            }
        }
        System.out.println("Total Number of received Process: "+processedCount);
        System.out.println("Number of records skipped: "+skippedCount);
        scanFile.close();
        PrintWriter writer = new PrintWriter(new FileWriter("report.txt"));
        //Preparing Report
        double grandTotal=0;
        double value =0;

        writer.println("Joe E. Bagadonuts for the Albatross Company, Ltd.\nPrepared On: "+ Calendar.getInstance().getTime());
        writer.println("\t\tI N V E N T O R Y  R E P O R T\nInventory Item");
        writer.println(String.format("%5s %19s %10s %10s %10s","Number","Description","Quantity","Unit Price","Value"));
        writer.println(String.format("%5s %19s %10s %10s %10s","------","-----------","--------","----------","------"));
        for (int j = 0; j <i ; j++) {
            value = inventoryItems[j].getQuantity()*inventoryItems[j].getUnitCost();
            grandTotal+=value;
            writer.println(String.format("%5s %19s %10s %11s %11s",inventoryItems[j].getItemNumber(),inventoryItems[j].getDescription(),inventoryItems[j].getQuantity(),NumberFormat.getCurrencyInstance().format(inventoryItems[j].getUnitCost()),NumberFormat.getCurrencyInstance().format(value)));

        }
        writer.println(String.format("%5s %19s %10s %10s %10s"," "," "," ","","==================="));
        writer.println(String.format("%5s %19s %10s %11s %11s"," "," "," ","Total ", NumberFormat.getCurrencyInstance().format(grandTotal)));

        writer.close();
    }
    catch (FileNotFoundException ex)
    {
        System.err.println("File not found...");
    } catch (IOException e) {
        System.err.println("Error in creating report");
    }
}

}

You are getting that exception because the number that you are trying to parse has space with it. trim() is a function in java which is used to remove space before and after a string. Read this to know more about trim.

import java.io.*;
import java.text.NumberFormat;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Scanner;

public class InventoryItemTest {
    private static final int INVENTORY_SIZE=100;
    public static void main(String[] args)
    {
        InventoryItem[] inventoryItems= new
                InventoryItem[INVENTORY_SIZE];
        int i= 0;
        //Process the file
        try {
            Scanner scanfile = new Scanner(new File("items.txt"));

            while (scanfile.hasNextLine())
            {
                String[] lines = scanfile.nextLine().split(",");
                int i1 = Integer.parseInt(lines[0].trim());
                if(i1>=20000 && i1<=79999) {
                    inventoryItems[i] = new InventoryItem(i1, lines[1], Integer.parseInt(lines[2].trim()), Double.parseDouble(lines[3].trim()));
                    i++;
                }
            }
            System.out.println(i+" items has been created.");
            scanfile.close();
        }
        catch (FileNotFoundException ex)
        {
            System.err.println("FILE NOT FOUND!!!!");
        }

        try
        {
            int processedCount=0,skippedCount=0;
            Scanner scanFile = new Scanner(new File("activity.txt"));

            while (scanFile.hasNextLine())
            {
                String[] tokens = scanFile.nextLine().split(",");
                int id = Integer.parseInt(tokens[1].trim());
                System.out.println(id);
                int q = Integer.parseInt(tokens[2].trim());
                for (int j = 0; j <i ; j++) {
                    if(id==inventoryItems[j].getItemNumber())
                    {
                        processedCount++;
                        switch (tokens[0])
                        {
                            case "D":
                                inventoryItems[j].setQuantity(q);
                                break;
                            case "R":
                                inventoryItems[j].receiveItems(q);
                                break;
                            case "S":
                                inventoryItems[j].shipItems(q);
                                break;
                        }
                    }
                    skippedCount++;
                }
            }
            System.out.println("Total Number of received Process: "+processedCount);
            System.out.println("Number of records skipped: "+skippedCount);
            scanFile.close();
            PrintWriter writer = new PrintWriter(new FileWriter("report.txt"));
            //Preparing Report
            double grandTotal=0;
            double value =0;

            writer.println("Joe E. Bagadonuts for the Albatross Company, Ltd.\nPrepared On: "+ Calendar.getInstance().getTime());
            writer.println("\t\tI N V E N T O R Y  R E P O R T\nInventory Item");
            writer.println(String.format("%5s %19s %10s %10s %10s","Number","Description","Quantity","Unit Price","Value"));
            writer.println(String.format("%5s %19s %10s %10s %10s","------","-----------","--------","----------","------"));
            for (int j = 0; j <i ; j++) {
                value = inventoryItems[j].getQuantity()*inventoryItems[j].getUnitCost();
                grandTotal+=value;
                writer.println(String.format("%5s %19s %10s %11s %11s",inventoryItems[j].getItemNumber(),inventoryItems[j].getDescription(),inventoryItems[j].getQuantity(),NumberFormat.getCurrencyInstance().format(inventoryItems[j].getUnitCost()),NumberFormat.getCurrencyInstance().format(value)));

            }
            writer.println(String.format("%5s %19s %10s %10s %10s"," "," "," ","","==================="));
            writer.println(String.format("%5s %19s %10s %11s %11s"," "," "," ","Total ", NumberFormat.getCurrencyInstance().format(grandTotal)));

            writer.close();
        }
        catch (FileNotFoundException ex)
        {
            System.err.println("File not found...");
        } catch (IOException e) {
            System.err.println("Error in creating report");
        }
    }

Try using below method while calling parseInt in InventoryItemTest while reading items.txt.

Integer getIntVal(String val){
 return val!=null ? Integer.parseInt(val.trim()) : null;
}

Eg:

if(getIntVal(lines[0])>=20000 && getIntVal(lines[0])<=79999) { 
                inventoryItems[i] = new InventoryItem(getIntVal(lines[0]), lines[1], getIntVal(lines[2]), Double.parseDouble(lines[3]));
                i++;
           } 

Use trim() wherever you are accessing your lines[] array.

 if (Integer.parseInt(lines[0].trim().trim()) >= 20000 && Integer.parseInt(lines[0].trim()) <= 79999)
 {
      inventoryItems[i] = new InventoryItem(Integer.parseInt(lines[0].trim()), lines[1].trim(), Integer.parseInt(lines[2].trim()), Double.parseDouble(lines[3].trim()));
      i++;
 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM