试图使用Date(int,int,int)构造函数

时间:2016-07-27 03:12:00

标签: java date debugging constructor

我正在尝试使用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.
    }

}

1 个答案:

答案 0 :(得分:0)

修剪空格

正如评论所说,您必须修剪出现在数字4前面的SPACE字符。你可以在字符串上调用replace( " " , "" )。或者使用Google Guava库清除空白区域。

sql vs util

请注意java.sql.Date类,该类旨在表示仅限日期的值。相比之下,您使用的java.util.Date类代表日期加上时间。

对于仅限日期的值,如果您不能使用下面描述的java.time框架,则sql.Date类更合适。但是也知道类是一个糟糕的黑客,从util.Date扩展,同时指示你忽略继承的事实并忽略其调整为00:00:00 UTC的嵌入时间。混乱?是。这些旧的日期时间类是一团糟。

java.time

你说你的导师要求Date课程,但是你应该知道这堂课是出了名的麻烦,不推荐。

您正在使用旧的过时类java.util.Date,该类已被Java 8及更高版本中内置的java.time框架取代。

而是使用LocalDate作为仅限日期的值,没有时间和没有时区。

LocalDate localDate = LocalDate.of( 2016 , 4 , 24 );