我正在尝试使用Date(int,int,int)构造函数(根据教师的要求),我遇到了一些困难。
最初我收到警告,因为显然这个构造函数已被弃用,另外由于我使用代码而出现错误。
我会在下面附上我的代码。我尝试将fileRead.nextInt()用于文件Scanner,我也尝试使用Integer.parseInt(fileRead.next())看到下面的方法。
这是从具有以下格式的文本的文件中读取:
firstName lastName, 4, 24, 2016, aStringOfTextPossiblyMultipleWords...
其中4是月,24是日,2016是年。
我得到的错误是......
Exception in thread "main" java.lang.NumberFormatException: For input string: " 4"
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 BlogEntryTester.main(BlogEntryTester.java:59)
/NetBeans/8.1/executor-snippets/run.xml:53: Java returned: 1
BUILD FAILED (total time: 6 seconds)
这是代码。错误是在运行时接近代码结束时。
import java.util.Date;
import java.util.Scanner;
import java.io.*;
public class BlogEntryTester {
/**
* @param args the command line arguments
*/
public static void main(String[] args){
Date newDate = new Date();
BlogEntry BE1 = new BlogEntry();
BlogEntry BE2 = new BlogEntry("firstName", newDate, "This is the body of "
+ "blog entry number two. This is the last sentence.");
BlogEntry BE3 = new BlogEntry(BE2);
BE1.setUsername("randFirstName");
BE1.setDateOfBlog(newDate);
BE1.setBlog("This is less than 10 words...");
System.out.println(BE1.toString());
System.out.println(BE2.toString());
System.out.println(BE3.toString());
Scanner keyboard = new Scanner(System.in);
Scanner fileRead = null;
String fileName;
System.out.print("Enter the name of the file you wish to read from: ");
fileName = keyboard.next();
try{
fileRead = new Scanner(new FileInputStream(fileName));
System.out.println("> File opened successfully.");
fileRead.useDelimiter(",|\\n");
}
catch(FileNotFoundException e){
System.out.println("> File not found.");
System.exit(0);
}
BlogEntry newBlog = new BlogEntry();
newBlog.setUsername(fileRead.next()); // Reads username from file.
if(newBlog.getUsername().length() > 20){
System.out.println("> Error: Username read from file exceeds 20 "
+ "characters.");
}
newBlog.setDateOfBlog(new Date(Integer.parseInt(fileRead.next()),
Integer.parseInt(fileRead.next()),
Integer.parseInt(fileRead.next())));
newBlog.setBlog(fileRead.next()); // Reads the text of the blog.
System.out.println(newBlog.toString()); // Prints the data gathered from file.
}
}
答案 0 :(得分:0)
正如评论所说,您必须修剪出现在数字4
前面的SPACE字符。你可以在字符串上调用replace( " " , "" )
。或者使用Google Guava库清除空白区域。
请注意java.sql.Date
类,该类旨在表示仅限日期的值。相比之下,您使用的java.util.Date
类代表日期加上时间。
对于仅限日期的值,如果您不能使用下面描述的java.time框架,则sql.Date
类更合适。但是也知道类是一个糟糕的黑客,从util.Date扩展,同时指示你忽略继承的事实并忽略其调整为00:00:00 UTC的嵌入时间。混乱?是。这些旧的日期时间类是一团糟。
你说你的导师要求Date
课程,但是你应该知道这堂课是出了名的麻烦,不推荐。
您正在使用旧的过时类java.util.Date
,该类已被Java 8及更高版本中内置的java.time框架取代。
而是使用LocalDate
作为仅限日期的值,没有时间和没有时区。
LocalDate localDate = LocalDate.of( 2016 , 4 , 24 );