问题

我有像1100,1002,1022等数字。我想有个别数字,例如我想要的第一个数字1100,1,0,0。

我怎样才能用Java获取它?


#1 热门回答(154 赞)

为此,你将使用%(mod)运算符。

int number; // = some int

while (number > 0) {
    print( number % 10);
    number = number / 10;
}

mod运算符将为你提供对数字进行int除法的剩余部分。

所以,

10012 % 10 = 2

因为:

10012 / 10 = 1001, remainder 2

**注:**正如保罗所说,这将以相反的顺序给你数字。你需要将它们推入堆栈并以相反的顺序将它们弹出。

代码以正确的顺序打印数字:

int number; // = and int
LinkedList<Integer> stack = new LinkedList<Integer>();
while (number > 0) {
    stack.push( number % 10 );
    number = number / 10;
}

while (!stack.isEmpty()) {
    print(stack.pop());
}

#2 热门回答(61 赞)

将其转换为String并使用String#toCharArray()orString#split()

String number = String.valueOf(someInt);

char[] digits1 = number.toCharArray();
// or:
String[] digits2 = number.split("(?<=.)");

如果你已经使用Java 8并且之后碰巧想要对它进行一些聚合操作,请考虑使用String#chars()来获取它的IntStream

IntStream chars = number.chars();

#3 热门回答(23 赞)

这个怎么样?

public static void printDigits(int num) {
    if(num / 10 > 0) {
        printDigits(num / 10);
    }
    System.out.printf("%d ", num % 10);
}

或者不是打印到控制台,我们可以在整数数组中收集它然后打印数组:

public static void main(String[] args) {
    Integer[] digits = getDigits(12345);
    System.out.println(Arrays.toString(digits));
}

public static Integer[] getDigits(int num) {
    List<Integer> digits = new ArrayList<Integer>();
    collectDigits(num, digits);
    return digits.toArray(new Integer[]{});
}

private static void collectDigits(int num, List<Integer> digits) {
    if(num / 10 > 0) {
        collectDigits(num / 10, digits);
    }
    digits.add(num % 10);
}

原文链接