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.