2015-09-20 80 views
3

如果不使用「dateformat」或其他方法,我試圖將美國日期「mm/dd/yyyy」的字符串更改爲歐盟格式「dd/mm/yyyy 」。我要使用字符串和字符串方法來做到這一點。我覺得我非常接近這一點,但不能完全弄明白。 這是我的代碼:在java中將美國的日期轉換爲歐盟的日期

import java.util.Scanner; 

public class DateChange { 

    public static void main(String[] args) { 
     Scanner kbd = new Scanner(System.in); 
     String usDate, euDate, day, month; 
     int year; 
     System.out.println("Enter a date in the form month/day/year:"); 
     usDate = kbd.nextLine(); 
     month = usDate.substring(0, '/'); 
     day = usDate.substring('/', '/'); 
     year = usDate.lastIndexOf('/'); 
     euDate = day + "." + month + "." + year; 
     System.out.println("Your date in European form is:"); 
     System.out.println(euDate); 
    } 

} 

這是我收到的錯誤:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 47 
    at java.lang.String.substring(String.java:1963) 
    at DateChange.main(DateChange.java:12) 
+2

提示:'的System.out.println((int)的 '/');'打印47 – Tunaki

+0

會你介意再詳細一點? – T3rm3nator

+2

你正在給'substring'這個'/'字符,這意味着「整數47」。它不是所述字符的_index_。 – Tunaki

回答

1

的問題是,java.String.substring需要兩個INT值,而不是焦炭值。 '/'的int值是47,所以子字符串以47爲輸入,而不是indexOf'/'。

如果要解決這個問題,而不使用Java庫,使用下面的代碼:

import java.util.*; 

public class DateChange { 
    public static void main(String[] args) { 
     Scanner kbd = new Scanner(System.in); 
     String usDate, euDate, day = "", month = "", year = ""; 
     System.out.println("Enter a date in the form month/day/year:"); 
     usDate = kbd.nextLine(); 
     kbd.close(); 
     month = usDate.substring(0, usDate.indexOf("/")); 
     day = usDate.substring(usDate.indexOf("/")+1, usDate.lastIndexOf("/")); 
     year = usDate.substring(usDate.lastIndexOf("/")+1, usDate.length()); 
     euDate = day + "." + month + "." + year; 
     System.out.println("Your date in European form is:"); 
     System.out.println(euDate); 
    } 
} 
+0

啊我明白了。我已經將字符串的日,月,年更改爲整數,並且它運行整個程序,但是當它打印歐盟日期時,它給了我-1.-1.5當我輸入「02/13/2009」 – T3rm3nator

+0

我將使用您的代碼並回到你身邊。 – T3rm3nator

+0

運行更順利,有幾條線我將不得不調整,以便我可以得到正確的輸出。感謝您的幫助 – T3rm3nator

0
Scanner kbd = new Scanner(System.in); 
     String usString = kbd.nextLine(); 
     String[] stringArray = usString.split("(\\/|\\.)"); 
     String month = stringArray[0]; 
     String day = stringArray[1]; 
     String year = stringArray[2]; 
     System.out.println("m"+month+"d"+day+"y"+year); 

這段代碼演示瞭如何使用正則表達式來刺痛分割成一個字符串數組,然後可以無需使用DateFormat類重新組裝成EU格式。

+1

在問題中,我說我不能使用dateformat或其他的東西,其中包括SimpleDateFormat,原因是我沒有被教過。感謝您的輸入。 – T3rm3nator

+0

我用代碼更新了重播,它應該允許您解析由「/」或「。」分隔的日期字符串。 – Beryllium

+0

我明白了,這很有幫助。謝謝 – T3rm3nator

1

爲什麼不使用'/'作爲分隔符使用方法String.split分割輸入字符串。它返回一個字符串數組。只需交換數組的前兩個元素即可。

String usdate = "12/27/2015"; 
String[] arr = usdate.split("/"); 
String eudate = arr[1] + "/" + arr[0] + "/" + arr[2]; 
相關問題