在Java中提取int的数字

所以,如果我有一个输入的整数:

int num_1 = 128 

我如何能够解析数字并获得1,2和8,并将它们分配给不同的变量?

谢谢!

执行此操作的低效方法是将整数转换为字符串并迭代字符串字符。

更有效的方式是:

 int n = 128; while (n > 0) { int d = n / 10; int k = n - d * 10; n = d; System.out.println(k); } 

Thilo写的答案虽然好但不完整,你首先要做的是:

 char[] digitsAsChars = String.valueOf(num_1).toCharArray(); 

接着:

 int[] digits = new int[charNums.length]; for(int i=0; i 

now digits将数字的digits保存为int数组

尝试

 while (num_1> 0){ int digit = num_1%10; num_1 = num_1/10; System.out.println(digit); } 
 int num = 128; String number = String.valueOf(num); for(int i = 0; i < number.length(); i++) { int j = Character.digit(number.charAt(i), 10); System.out.println("digit: " + j); } 

输出:

 digit: 1 digit: 2 digit: 8 

把它变成一个字符串,然后逐个字符地输入数字:

 char[] digits = String.valueOf(num_1).toCharArray(); 

这是一种方式:

 String digits = Integer.toString(num_1); int digit1 = Character.digit(digits.charAt(0), 10); int digit2 = Character.digit(digits.charAt(1), 10); int digit3 = Character.digit(digits.charAt(2), 10); 

当然,如果整数有三位以上,使用循环会更实用:

 String sDigits = Integer.toString(num_1); char[] cDigits = sDigits.toCharArray(); int[] digits = new int[cDigits.length]; for (int i = 0; i < cDigits.length; i++) digits[i] = Character.digit(cDigits[i], 10); 

使用上面的代码,可以很容易地从数组中提取数字:

 int digit1 = digits[0]; int digit2 = digits[1]; int digit3 = digits[2]; 

收集数组中的所有数字并进一步使用

 import java.lang.Integer; import java.lang.String; import java.util.ArrayList; import java.util.List; import java.util.Arrays; public class Test { public static void main(String[] args) { Integer num = 12345; Integer[] digits = getDigits(num.toString()); System.out.println(Arrays.toString(digits)); } public static Integer[] getDigits(String number) { List digits = new ArrayList(); for(int i = 0; i < number.length(); i++) { int j = Character.digit(number.charAt(i), 10); digits.add(j); } return digits.toArray(new Integer[]{}); } } 

输出应该是

 [1, 2, 3, 4, 5] 

这是一种纯粹的数学方法:

 // Returns digit at pos static int digitAt(int input, int pos){ int i =(int) (input%(Math.pow(10, pos))); int j = (int) (i/Math.pow(10, pos-1)); return Math.abs(j); // abs handles negative input } 

例如,如果input = 1234pos = 2 ,则i34 。 我们将34除以10然后四舍五入得到3

不是很漂亮,但有效!

 String str = Integer.toString(num_1); 

你可以从这个str获得1,2,8

此代码返回给定索引处的半字节。 如果要获取所有数字,可以使用数字的所有索引调用此方法。 它不适用于数字的hex表示,但不适用于十进制表示。

 public static int getNibble(int number, int nibbleIndex) { int nibble = 0; while (nibbleIndex >= 0) { int division = number / 10; nibble = number - division * 10; number = division; nibbleIndex--; } return nibble; } 

现在,如果你试图在字母中输出一个字符串中的数字,那么这应该照顾它。

 String string = "Th1s 1s n0t a number"; int newNum = Integer.parseInt(string.replaceAll("[\\D]", "")); return newNum; 

这应该返回110

此外,这里是一个我发现非常有用的堆栈讨论的链接。 从Java中获取int,也包含字母

如果您不理解String转换的想法并希望使用正常顺序进行迭代,请尝试以下操作:

 int n = 123456789; int digits = (int) Math.log10(n); for (int i = (int) Math.pow(10, digits); i > 0; i /= 10) { System.out.println(n / i); n %= i; } 

输出将是

 1 2 3 4 5 6 7 8 9 

要知道数字的来源我会去:

 return (x/10/10) + (x%10) + (x/10)%10;