2016-04-30 39 views
-1

我想使用SimpleDateFormat格式化日期的字符串數組。它會正確格式化第一個條目,但聲稱第二個條目是不可解析的,即使它們是相同的。我無法弄清楚我在這裏做錯了什麼,有什麼提示?如何使用SimpleDateFormat格式化字符串數組

String dates = ""; 
    String test = "MM/dd/yyyy"; 
    String end = "MMMMMMMMM d, yyyy"; 
    SimpleDateFormat sdf = new SimpleDateFormat(test); 

    //Match the pattern of 1 or more digits, a backslash, one or more digits, 
    //a backslash, and then four digits 
    Pattern pattern = Pattern.compile("\\d+/\\d+/\\d\\d\\d\\d"); 
    Matcher matcher = pattern.matcher(input); 

    //While there are matches, concatenate the match to the string dates, 
    //with a semicolon separating each match 
    while (matcher.find()) 
    { 
     String a = matcher.group(0).toString(); 
     dates += ";" + a; 
    } 

    //Split the string on semicolons 
    String[] inputString = dates.split(";"); 

    for (int i=1; i<inputString.length; i++) 
    { 
     System.out.println(inputString[i]); 
    } 

    //Change all dates of format MM/dd/yyyy into Month date, year and 
    //force them into uppercase 
    for (int i=1; i<inputString.length; i++) 
    { 
     String old = inputString[i]; 
     Date a = sdf.parse(old); 
     sdf.applyPattern(end); 
     String notOld = sdf.format(a); 
     inputString[i] = notOld; 
     inputString[i] = inputString[i].toUpperCase(); 
     System.out.println(inputString[i]); 
    } 

這裏是輸出:

12/6/1852 
12/6/1954 
DECEMBER 6, 1852 
Exception in thread "main" java.text.ParseException: Unparseable date: "12/6/1954" 
at java.text.DateFormat.parse(Unknown Source) 
at Info.fixer(Info.java:132) 
at Info.main(Info.java:35) 
+0

'這個例子中的變量輸入是什麼? –

+0

對於此片段,文本文件僅保留: 「12/6/1852 12/6/1954」 兩行。字符串還有很多,因爲它是一個很長的文本文件,我在這裏提取日期,但是這些文件正在文件的頂部進行測試,所以它永遠不會超過它們。 –

+0

當你調用'applyPattern(end)',你改變'sdf'來格式化'MMMMMMMMM d,yyyy'。在下一次迭代中,您嘗試使用該格式解析'12/6/1954',並且糟糕!這是行不通的。 – Andreas

回答

0

Andreas的評論幫助。我不知道simpledateformat使用applyPattern()設置了一種格式,所以它爲後續值使用了不同的模式。這個改變到底部循環固定它:

for (int i=1; i<inputString.length; i++) 
{ 
    sdf1.applyPattern(dmy); 
    String old = inputString[i]; 
    Date a = sdf.parse(old); 
    sdf.applyPattern(end); 
    String notOld = sdf.format(a); 
    inputString[i] = notOld; 
    inputString[i] = inputString[i].toUpperCase(); 
    System.out.println(inputString[i]); 
} 
相關問題