为什么子串忽略转换整数中的零?
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))
我正在尝试从数字中获取最后两位和前两位数字。我的 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))