2016-04-24 45 views
0

因此程序假设采用“yyyy/dd/mm”格式的日期。在每个日期之后,可以输入文本。例如,“1776年7月4日第一个独立日”。我想使用一个字符串标记器,并在斜线处分割日期,但之后我很困惑如何在空格处分割它。一旦我将它们分开,我就可以将日期与其他日期进行比较是否正确?在Java中分割用户输入的日期

Scanner sc = new Scanner(System.in); 
    System.out.print("Enter the first date: "); 
    String firstDate = sc.nextLine(); 
    //System.out.print("Enter the second date: "); 
    //String secondDate = sc.nextLine(); 
    //System.out.println(); 
    //StringTokenizer date = new StringTokenizer(firstDate, "/",false); 
    //StringTokenizer space = new StringTokenizer(firstDate, " ",false); 
    //if (firstDate.equals(secondDate)) 
    //{ 
    // System.out.println (
     //   "There are 0 year(s), 0 month(s) and 0 day(s) between dates"); 
    //} 
    int firstSpace = firstDate.indexOf(' '); 

    String event = firstDate.substring(firstSpace + 1); // "First Independence Day" 

    String date = firstDate.substring(0, firstSpace); // "1776/7/4" 

    // split on '/' 
    String dateParts[] = date.split("/"); 
    String dateParts1[] = date.split("/"); 
    String dateParts2[]= date.split("/"); 
    if(dateParts1[1].length() != 2) 
     dateParts1[1] = "0" + dateParts1[1]; 

    // add 0 to front of day 
    if(dateParts1[2].length() != 2) 
     dateParts1[2] = "0" + dateParts1[2]; 

    // do the same for the second date 
    if(dateParts2[1].length() != 2) 
     dateParts2[1] = "0" + dateParts2[1]; 

    // convert array to string 
    String date1 = String.join("/", dateParts1); 
    String date2 = String.join("/", dateParts2); 

    // set up the format that you have 
    SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy/MM/dd"); 

    Date d1 = dateFormat.parse(date1); 
    Date d2 = dateFormat.parse(date2); 

    // equal dates 
    if(d1.equals(d2)) { 
     // There or 0 days, months and years between dates. 
    } 

回答

-1

只使用splite这样

字符串数据;

string [] parts;

parts = data.splite('');

+1

你可以正确书写'split' –

0
String x = "yyyy/dd/mm"; 
String[] split = x.split("/"); 
for (String s : split) { 
    System.out.println(s); 
} 


Output: 
yyyy 
dd 
mm 
0

我认为这将是一个好主意,以获得第一个空格字符的索引。

String text = "1776/7/4 First Independence Day"; 
        ^

int firstSpace = text.indexOf(' '); 

String event = text.substring(firstSpace + 1); // "First Independence Day" 

String date = text.substring(0, firstSpace); // "1776/7/4" 

// split on '/' 
String dateParts[] = date.split("/"); 

这将确保一切正常,即使事件名称包含/

编辑

要比较日期,您首先需要确保像April这样的月份的值为04而不是4.假设您有2个数组,即dateParts1和dateParts2。

// add 0 to front of month 
if(dateParts1[1].length() != 2) 
    dateParts1[1] = "0" + dateParts1[1]; 

// add 0 to front of day 
if(dateParts1[2].length() != 2) 
    dateParts1[2] = "0" + dateParts1[2]; 

// do the same for the second date; 

// convert array to string 
String date1 = String.join("/", dateParts1); 
String date2 = String.join("/", dateParts2); 

// set up the format that you have 
SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy/MM/dd"); 

Date d1 = dateFormat.parse(date1); 
Date d2 = dateFormat.parse(date2); 

// equal dates 
if(d1.equals(d2)) { 
    // do something 
} 

if(date2.after(date1)) 
    return true; 
else 
    return false; 

编辑2

String firstDate = "1776/7/4 First Independence Day"; 

int firstSpace = firstDate.indexOf(' '); 

String event = firstDate.substring(firstSpace + 1); // "First Independence Day" 

String date = firstDate.substring(0, firstSpace); // "1776/7/4" 

String dateParts1[] = date.split("/"); 
String dateParts2[] = date.split("/"); 

// add 0 to front of month 
if (dateParts1[1].length() != 2) 
    dateParts1[1] = "0" + dateParts1[1]; 

// add 0 to front of day 
if (dateParts1[2].length() != 2) 
    dateParts1[2] = "0" + dateParts1[2]; 

// do the same for the second date 
if (dateParts2[1].length() != 2) 
    dateParts2[1] = "0" + dateParts2[1]; 

// add 0 to front of day 
if (dateParts2[2].length() != 2) 
    dateParts2[2] = "0" + dateParts2[2]; 

// convert array to string 
String date1 = String.join("/", dateParts1); 
String date2 = String.join("/", dateParts2); 

// set up the format that you have 
java.text.SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 

java.util.Date d1 = dateFormat.parse(date1); 
java.util.Date d2 = dateFormat.parse(date2); 

if (d1.equals(d2)) 
    System.out.println("equal"); 
+0

@DesbosmitRay谢谢你,所以我打印出来的日期,它给了我日期。但是,将年,月和日与另一日期进行比较的逻辑是什么? –

+0

@JohnDoe首先,按年比较。如果是同一年,则按月比较。如果年份和月份相同,则按日期比较。要比较值,可以使用'[string1] .compareTo([string2])''。这有帮助吗? –

+0

@DesbosmitRay是的,我明白那一部分。我想我很困惑如何提取一年的分裂 –

0

我建议正则表达式和日期格式...

String input = "1776/07/04 First Independence Day"; 
Pattern pattern = Pattern.compile("(\\d+/\\d+/\\d+)\\s+(.*)"); 
Matcher matcher = pattern.matcher(input); 
if (matcher.find()) { 
    DateFormat format = new SimpleDateFormat("yyyy/M/d"); 
    Date date = format.parse(matcher.group(1)); 
    System.out.println(date + " " + matcher.group(2)); 
} 
0

我不太明白你的问题。 你可以只取第一个日期的标记并保存在一个新的字符串中,然后你可以使用string.compareTo(another String)来比较它。或者你可以使用简单的scanner.nextInt():方法将年,月和日作为整数,然后比较它们!希望我帮助。

+0

这不是一个答案。 '我不太理解你的问题'评论部分用于要求澄清。 –