2016-04-24 42 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

這不是一個答案。 '我不太理解你的問題'評論部分用於要求澄清。 –