为什么子串忽略转换整数中的零?

Why does substring ignore zeroes in casted integer?

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

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,即正确的输出。为什么 104 上的 substring 没有 return 在正确的位置输入 0

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

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

您的代码正确地进行了拆分,但是原语 int 没有以前导零存储;您可以 return 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 不会打印前导零。但是,您可以使用 use 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

“104”的最后两位是“04”。 然后,Integer.parseInt("04")的结果是4,因为作为一个整数,“04”的值就是4。如果你打印数字4,它自然打印为“4”。

但是你为什么要调用 Integer.parseInt? 问题描述似乎不明确。 不清楚最后两位是数字还是字符串。

如果最后两位数字应该是一个字符串,那么您的方法应该return一个字符串。

如果最后两位应该是数字,那么与其将输入 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);
}

当前方法签名return是一个整数。因此,它不能 return 02。您必须将其更改为字符串或格式化调用该方法的输出。

如果可以将 return 类型更改为 String,则可以: 第一种方式:

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

不然在调用方法的地方,可以格式化一下:

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