在Java中提取int的数字

Posted

技术标签:

【中文标题】在Java中提取int的数字【英文标题】:Extracting digits of int in Java 【发布时间】:2013-10-04 11:21:53 【问题描述】:

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

int num_1 = 128

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

谢谢!

【问题讨论】:

【参考方案1】:

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

更有效的方法是:

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

【讨论】:

您能否解释一下为什么将其转换为字符串并遍历它会降低效率? 转换本身正在做类似于我的函数所概述的事情。所以你会做这样的事情,然后运行可能更大的第二个循环,因为数字通常需要更长的时间作为字符串(32位数字可以是10个字符)。 其实可以把@​​987654322@换成int k = n % 10 当然。我想我希望代码能够最大限度地提高清晰度而不是紧凑性。【参考方案2】:

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 将数字的数字保存为 int 数组

【讨论】:

【参考方案3】:

试试

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

【讨论】:

【参考方案5】:

将其转换为字符串并逐个字符地读取数字:

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

【讨论】:

【参考方案6】:

这是一种方法:

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];

【讨论】:

【参考方案7】:

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

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]

【讨论】:

你不需要写三个方法来做几个模和除运算。 我将尝试修改我的代码并以一种方法进行更新。或给出建议【参考方案8】:

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

// 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,那么i 就是34。我们将34 除以10 并四舍五入得到3

不是很漂亮,但很管用!

【讨论】:

【参考方案9】:
String str = Integer.toString(num_1);

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

【讨论】:

【参考方案10】:

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

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;

【讨论】:

请添加更多关于如何解决问题的说明。【参考方案11】:

现在,如果您尝试在字母中的字符串中挑选出数字,那么这应该会解决这个问题。

String string = "Th1s 1s n0t a number";

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

这应该返回110

另外,这里是一个堆栈讨论的链接,我发现它真的很有帮助。 Get int from String, also containing letters, in Java

【讨论】:

【参考方案12】:

如果您不理解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 

【讨论】:

【参考方案13】:

要知道数字来自哪里,我会去:

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

【讨论】:

【参考方案14】:

我认为你可以使用这个解决方案:

int getDigit(int num,int location)
    return BigDecimal.valueOf(num/Math.pow(10,position)).intValue() %10;
  

在这个解决方案中会发生以下情况,由于使用了返回双精度的数学,您发送了一个数字,我们需要再次将其转换为整数,我们使用 BigDecimal。 主要思想或逻辑是 Math.pow ,其位置返回数字的前缀,然后模块切断另一端。 您可以使用以下示例进行检查:

    System.out.println(getDigit(123456,1));
    System.out.println(getDigit(123456,2));
    System.out.println(getDigit(123456,3));
    System.out.println(getDigit(123456,4));
    System.out.println(getDigit(123456,5));
    System.out.println(getDigit(123456,10) );  

享受

【讨论】:

【参考方案15】:

Java 8 解决方案

String.valueOf(n).chars().forEach(i -&gt; System.out.println((char) i))

其中 n=整数

【讨论】:

以上是关于在Java中提取int的数字的主要内容,如果未能解决你的问题,请参考以下文章

Java如何从字符串中提取数字

c++中如何从字符串2015-6-8取出年月日

如何在 java 中将 Int 转换为 Int[]?

java怎么让数组的数字从大到小排序?

Java提取字符串中的数字

Java提取字符串中的数字