在Java中提取整数的数字

11

那么如果我输入了一个整数:

int num_1 = 128

我该如何解析这个数字并获取其中的1、2和8,并将它们分配给不同的变量?

谢谢!

15个回答

20

一种低效的方法是将整数转换为字符串,然后迭代字符串字符。

更高效的方法是像这样:

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

你能否解释一下,为什么将其转换为字符串并迭代会更低效? - Joop
1
转换本身类似于我函数中概述的内容。因此,您将执行类似于此的操作,然后运行第二个循环,该循环可能会更大,因为数字通常作为字符串需要更长时间(32位数字可以是10个字符)。 - Omry Yadan
实际上,你可以用 int k = n % 10 替换 int k = n - d * 10 - Qiang
当然。我认为我想要的代码是最大化清晰度而不是紧凑性。 - Omry Yadan

7
Thilo写的答案不错但不完整,你可以开始做以下步骤:
char[] digitsAsChars = String.valueOf(num_1).toCharArray();

然后:
int[] digits = new int[charNums.length];
for(int i=0; i<charNums.length; i++){
   digits[i] = charNums[i]-48;//convert char to int
}

现在digits是一个整型数组,其中包含了数字的各个位数。

5

尝试

while (num_1> 0){
            int digit = num_1%10;
            num_1 = num_1/10;
            System.out.println(digit);
        }

4
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

3

将其转换为字符串,逐个处理数字的每个字符:

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

3
这里有一种方法:
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];

2
这里有一种纯数学的方法:
// 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,那么i34。我们将34除以10并四舍五入得到3
不那么漂亮,但起作用!

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<Integer> digits = new ArrayList<Integer>();
        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]

1
你不需要写三个方法来执行几个模数和除法操作。 - user207421
我会尝试在一个方法中修改代码并更新,或者提供建议。 - Ashwin Parmar

1
如果您不喜欢使用字符串转换的想法,并希望按照正常顺序迭代,请尝试以下方法:
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 

1
现在,如果您想从字母中单独提取字符串中的数字,则应该处理此问题。
String string = "Th1s 1s n0t a number";

int newNum = Integer.parseInt(string.replaceAll("[\\D]", ""));
return newNum;

这应该返回110

同时,这里有一个我发现非常有帮助的堆栈讨论链接。 从带字母的字符串中获取整数,在Java中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接