[英]java - Exception in thread “main” java.lang.NumberFormatException: For input string: “” at
[英]Exception in thread "main" java.lang.NumberFormatException: For input string: " 38"
對於我幾乎准備好的作業,但似乎無法克服錯誤..文件 items.txt 數據
12345,Ballpeen Hammer,25,18.75
56789,十字螺絲刀,120,10.95
24680,爪錘,35,15.98
13579,套筒扳手,48,20.35
28967,六角扳手,70,19.98
文件activity.txt數據
D,12345,0
R,12345,100
S,12345,45
我一次又一次收到的錯誤告訴我錯誤
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 返回:1 BUILD FAILED(總時間:0 秒)
不工作的代碼
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");
}
}
}
您收到該異常是因為您嘗試解析的數字有空格。 trim()
是java中的一個函數,用於去除字符串前后的空格。 閱讀 本文以了解有關修剪的更多信息。
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");
}
}
在讀取 items.txt 時,在 InventoryItemTest 中調用 parseInt 時嘗試使用以下方法。
Integer getIntVal(String val){
return val!=null ? Integer.parseInt(val.trim()) : null;
}
例如:
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++;
}
在您訪問 lines[] 數組的任何地方使用 trim()。
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++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.