在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 = 1234
且pos = 2
,则i
为34
。 我们将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;