为什么substring忽略了转换整数中的零?

时间:2015-08-19 21:49:50

标签: java parsing substring

我正在尝试从数字中获取最后两位和前两位数字。我使用lastTwo函数的返回值得到了一个非常奇怪的结果。

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,这是正确的输出。为什么substring 104未在正确的位置返回0

这是我的bluej控制台,仅用于额外的视觉效果:

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

3 个答案:

答案 0 :(得分:3)

您的代码正在正确进行拆分,但原始int未存储前导零;您只需将String而不是Integer.parse返回int即可。 e.g。

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

答案 1 :(得分: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);
}

答案 2 :(得分:0)

当前方法签名返回一个int。因此,它不能返回02.您必须将其更改为String或格式化调用方法的输出。

如果您可以将返回类型更改为String,则可以执行以下操作: 第一种方式:

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

否则,在调用方法的地方,您可以格式化它:

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