2015-08-19 34 views
-2

我想從數字中得到最後兩位數字和前兩位數字。我用我的lastTwo函數的返回值得到了一個非常奇怪的結果。爲什麼substring忽略流水線整數中的零?

public static int lastTwo(int digit){ 
    String str = Integer.toString(digit); 
    String lastTwo = str.substring(str.length()-2); 
    int response = Integer.parseInt(lastTwo); 
    return response; 
} 

當輸入digit是104,這樣做的輸出僅僅是4,但是當輸入爲114,輸出是14這是正確的輸出。爲什麼substring104沒有在正確的位置返回0

,這裏是我的BlueJ控制檯只是額外的視覺效果:

twoDigit.main({ }) (104) 
4 
10 
twoDigit.main({ }) (114) 
14 
10 
+1

保持結果作爲'String'(不要轉換爲'int')。 –

+0

返回'String',而不是'int',開頭爲'0' – Andrew

+1

因爲'int's是_numbers_。數字04和4之間沒有區別。 –

回答

3

您的代碼做正確的分裂,但原始int s的未儲存有前導零;您可以將String而不是Integer.parse返回到int。例如

public static int lastTwoAsString(int digit){ 
    String str = Integer.toString(digit); 
    String lastTwo = str.substring(str.length()-2); 
    return lastTwo; 
} 

如果你確實要分析它回到一個int,Java將默認不打印前導零。但是,您可以使用String.format打印int的前導零。請注意,您必須指定一個寬度使用0改性劑,在這種情況下2是很有道理的:

public static void main(String[] args) { 
    int value = lastTwo(104); 
    String output = String.format("%02d", value); 
    System.out.println(output); 
} 

輸出:

04 
3

最後兩個「104」的數字是「04」 。 然後,Integer.parseInt("04")的結果是4,因爲作爲一個整數,「04」的值只是4.並且如果您打印數字4,它自然打印爲「4」。

但是你爲什麼要叫Integer.parseInt呢? 問題描述似乎沒有詳細說明。 目前還不清楚最後兩位數字應該被視爲數字還是字符串。

如果最後兩位數字應該是一個字符串,那麼你的方法應該返回一個字符串。

如果最後兩位數字應該是一個數字,然後代替輸入int轉換爲String,這將是最好使用模運算符:

static int lastTwo(int number) { 
    return number % 100; 
} 

static String lastTwoAsString(int number) { 
    String string = Integer.toString(number); 
    return string.substring(string.length() - 2); 
} 
0

目前的方法簽名返回一個int。因此,它不能返回02.您必須將其更改爲字符串或格式化調用該方法的輸出。

如果你可以改變返回類型爲String,你可以這樣做: 第一種方式:

public static String lastTwo(int digit) { 
    String str = String.valueOf(digit); 
    return = str.substring(str.length() - 2); 
} 

否則,在那裏你調用該方法,可以將其格式化:

String.format("%02d", lastTwo(digit))