【问题标题】:Why does substring ignore zeroes in casted integer?为什么子字符串会忽略强制转换整数中的零?
【发布时间】:2015-11-13 09:16:06
【问题描述】:

我正在尝试从一个数字中获取最后两位和前两位。我的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

【问题讨论】:

  • 保持结果为String(不要转换为int)。
  • 返回String,而不是int,以在开头使用0
  • 因为ints 是数字。数字 04 和 4 没有区别。

标签: java parsing substring


【解决方案1】:

您的代码正确地进行了拆分,但原始ints 未使用前导零存储;您可以只返回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

【讨论】:

    【解决方案2】:

    “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);
    }
    

    【讨论】:

      【解决方案3】:

      当前方法签名返回一个 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))
      

      【讨论】:

        猜你喜欢
        • 2018-02-02
        • 2016-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-15
        • 2020-11-15
        相关资源
        最近更新 更多