2014-10-16 55 views
1

我試圖解析像"dd/mm/yyyy"這樣的日格式,但是使用useDelimiter,但遇到了一個奇怪的問題。我使用了下面的代碼,這在Ubuntu終端上運行良好。Ubuntu終端中的工作代碼,在Windows中不起作用Eclipse

Scanner k = new Scanner(System.in); 
k.useDelimiter("/|\n"); 
String day,month,year; 
day = k.next(); month = k.next(); year = next(); 
System.out.println(day + "/" + month + "/" + year); 
int d = Integer.parseInt(day); 
int m = Integer.parseInt(month); 
int y = Integer.parseInt(year); 

但是在Windows上,當我將此代碼複製到Eclipse,它在提供了一個錯誤:

int y = Integer.parseInt(year); 

我發現是什麼原因造成這一點。當我打印「年份」時,它會打印2014年,但在2014末尾有一些空白,因此整數未正確解析。我解決了這個改變的代碼在Eclipse中:

year = next().trim(); 

但是:

我的問題是,怎麼能是可能的,同樣的代碼工作在Ubuntu上而不是在Windows平臺上?

回答

2

嘗試添加\ r到分隔符。 在Ubuntu新行中只有\ n,而在Microsoft新行中是'\ r \ n'

+0

現在它沒事了,我明白你的意思了,謝謝。 – 2014-10-16 22:49:49

+0

不僅僅是Ubuntu - 當Windows使用'\ r \ n'(回車,換行)時,幾乎所有的Unix系統都使用'\ n'(換行符)。 – hexafraction 2014-10-16 22:56:44

3

您也可以使用line.seperator。 System.getProperty(「line.separator」)將檢索您的操作系統使用的正確的行分隔符。

public class Tester { 


public static void main(String[] args) { 
    Scanner k = new Scanner(System.in); 
    String newLine = System.getProperty("line.separator"); 

    k.useDelimiter("/|"+newLine); 
    String day,month,year; 

    day = k.next(); 
    month = k.next(); 
    year = k.next(); 
    System.out.println(day + "/" + month + "/" + year); 


} 
} 
+0

這是更靈活的解決方案,感謝您的建議 – 2014-10-17 00:09:50

相關問題