我正在尝试从数字中获取最后两位和前两位数字。我使用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
答案 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))