如何获得一个整数的单独数字?
我有像1100,1002,1022等数字。我想有个人数字,例如对于第一个数字1100我想有1,1,0,0。
我怎样才能得到它在Java?
为此,您将使用%
(mod)运算符。
int number; // = some int while (number > 0) { print( number % 10); number = number / 10; }
mod运算符会给你一个数字进行整除的余数。
所以,
10012 % 10 = 2
因为:
10012 / 10 = 1001, remainder 2
注意:正如保罗所说,这将会以相反的顺序给你。 您需要将它们推入堆栈,然后以相反的顺序popup它们。
代码以正确的顺序打印数字:
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()); }
将其转换为String
并使用String#toCharArray()
或String#split()
。
String number = String.valueOf(someInt); char[] digits1 = number.toCharArray(); // or: String[] digits2 = number.split("(?<=.)");
如果你已经在Java 8上,并且之后你想对它做一些聚合操作,可以考虑使用String#chars()
来获得一个IntStream
。
IntStream chars = number.chars();
这个怎么样?
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); }
我还没有看到有人使用这种方法,但它为我工作,是短而甜蜜的:
int num = 5542; 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: 5 digit: 5 digit: 4 digit: 2
// could be any num this is a randomly generated one int num = (int) (Math.random() * 1000); // this will return each number to a int variable int num1 = num % 10; int num2 = num / 10 % 10; int num3 = num /100 % 10; // you could continue this pattern for 4,5,6 digit numbers // dont need to print you could then use the new int values man other ways System.out.print(num1); System.out.print("\n" + num2); System.out.print("\n" + num3);
我认为更简单的方法是将数字转换为string,并使用substring
来提取,然后转换为整数。
像这样的东西:
int digits1 =Integer.parseInt( String.valueOf(201432014).substring(0,4)); System.out.println("digits are: "+digits1);
输出是2014年
我写了一个程序,演示了如何使用一个更简单,更容易理解的方法来分隔整数的数字,这个方法不涉及数组,recursion和所有那些奇怪的schmancy。 这是我的代码:
int year = sc.nextInt(), temp = year, count = 0; while (temp>0) { count++; temp = temp / 10; } double num = Math.pow(10, count-1); int i = (int)num; for (;i>0;i/=10) { System.out.println(year/i%10); }
假设你的input是整数123
,结果输出如下:
1 2 3
看到我的build议与评论
int size=i.toString().length(); // the length of the integer (i) we need to split; ArrayList<Integer> li = new ArrayList<Integer>(); // an ArrayList in whcih to store the resulting digits Boolean b=true; // control variable for the loop in which we will reatrive step by step the digits String number="1"; // here we will add the leading zero depending on the size of i int temp; // the resulting digit will be kept by this temp variable for (int j=0; j<size; j++){ number=number.concat("0"); } Integer multi = Integer.valueOf(number); // the variable used for dividing step by step the number we received while(b){ multi=multi/10; temp=i/(multi); li.add(temp); i=i%(multi); if(i==0){ b=false; } } for(Integer in: li){ System.out.print(in.intValue()+ " "); }
这是我的答案,我是为自己做的,希望对于不想使用String方法或需要更多math解决scheme的人来说,
public static void reverseNumber2(int number) { int residual=0; residual=number%10; System.out.println(residual); while (residual!=number) { number=(number-residual)/10; residual=number%10; System.out.println(residual); } }
所以我把这些单位打印出来,从数字中减去它们,然后把这个数字除以10,这个数字总是没有任何浮动的东西,因为单位不见了,重复一遍。
Java 8解决scheme将数字作为int []从作为string的整数中获取:
int[] digits = intAsString.chars().map(i -> i - '0').toArray();
Integer.toString(1100)以stringforms给出整数。 Integer.toString(1100).getBytes()获取单个数字的字节数组。
编辑:
您可以将字符数字转换为数字,因此:
String string = Integer.toString(1234); int[] digits = new int[string.length()]; for(int i = 0; i<string.length(); ++i){ digits[i] = Integer.parseInt(string.substring(i, i+1)); } System.out.println("digits:" + Arrays.toString(digits));
这使用模10方法来计算每个数字大于0的数字,然后这将颠倒数组的顺序。 这是假设你没有使用“0”作为起始数字。
这被修改以接收用户input。 这个数组最初是反向插入的,所以我不得不使用Collections.reverse()
调用把它放回到用户的顺序中。
Scanner scanNumber = new Scanner(System.in); int userNum = scanNumber.nextInt(); // user's number // divides each digit into its own element within an array List<Integer> checkUserNum = new ArrayList<Integer>(); while(userNum > 0) { checkUserNum.add(userNum % 10); userNum /= 10; } Collections.reverse(checkUserNum); // reverses the order of the array System.out.print(checkUserNum);
为了构build这个主题,下面是如何确认这个数字是Java中的一个回文整数:
public static boolean isPalindrome(int input) { List<Integer> intArr = new ArrayList(); int procInt = input; int i = 0; while(procInt > 0) { intArr.add(procInt%10); procInt = procInt/10; i++; } int y = 0; int tmp = 0; int count = 0; for(int j:intArr) { if(j == 0 && count == 0) { break; } tmp = j + (tmp*10); count++; } if(input != tmp) return false; return true; }
我相信我可以进一步简化这个algorithm。 然而,这是我的地方。 它已经在我所有的testing用例下工作了。
我希望这可以帮助别人。
int number = 12344444; // or it Could be any valid number int temp = 0; int divider = 1; for(int i =1; i< String.valueOf(number).length();i++) { divider = divider * 10; } while (divider >0) { temp = number / divider; number = number % divider; System.out.print(temp +" "); divider = divider/10; }
尝试这个:
int num= 4321 int first = num % 10; int second = ( num - first ) % 100 / 10; int third = ( num - first - second ) % 1000 / 100; int fourth = ( num - first - second - third ) % 10000 / 1000;
你会得到第一= 1,第二= 2,第三= 3和第四= 4 ….
public int[] getDigitsOfANumber(int number) { String numStr = String.valueOf(number); int retArr[] = new int[numStr.length()]; for (int i = 0; i < numStr.length(); i++) { char c = numStr.charAt(i); int digit = c; int zero = (char) '0'; retArr[i] = digit - zero; } return retArr; }
由于我没有看到使用Java 8的这个问题的一个方法,所以我会把它扔进去。假设你是从一个String
开始,想要一个List<Integer>
,那么你可以像这样。
List<Integer> digits = digitsInString.chars().map(Character::getNumericValue) .collect(Collectors.toList());
这将string中的String
作为IntStream
,将这些字符的整数表示映射为数字值,然后将其收集到列表中。
像这样的东西会返回char[]
:
public static char[] getTheDigits(int value){ String str = ""; int number = value; int digit = 0; while(number>0){ digit = number%10; str = str + digit; System.out.println("Digit:" + digit); number = number/10; } return str.toCharArray(); }
import java.util.Scanner; class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num=sc.nextInt(); System.out.println("Enter a number (-1 to end):"+num); int result=0; int i=0; while(true) { int n=num%10; if(n==-1){ break; } i++; System.out.println("Digit"+i+" = "+n); result=result*10+n; num=num/10; if(num==0) { break; } } } }
我认为这将是获取数字的最有用的方法:
public int[] getDigitsOf(int num) { int digitCount = Integer.toString(num).length(); if (num < 0) digitCount--; int[] result = new int[digitCount]; while (digitCount-- >0) { result[digitCount] = num % 10; num /= 10; } return result; }
那么你可以用一个简单的方法获得数字:
int number = 12345; int[] digits = getDigitsOf(number); for (int i = 0; i < digits.length; i++) { System.out.println(digits[i]); }
或者更简单:
int number = 12345; for (int i = 0; i < getDigitsOf(number).length; i++) { System.out.println( getDigitsOf(number)[i] ); }
注意最后一个方法调用getDigitsOf方法的时间太多了。 所以它会变慢。 您应该创build一个int数组,然后调用getDigitsOf方法一次,就像在第二个代码块中一样。
在下面的代码中,您可以反转到处理。 这个代码把所有数字放在一起做出数字:
public int digitsToInt(int[] digits) { int digitCount = digits.length; int result = 0; for (int i = 0; i < digitCount; i++) { result = result * 10; result += digits[i]; } return result; }
我提供的两种方法也适用于负数。
import java.util.Scanner; public class SeparatingDigits { public static void main( String[] args ) { System.out.print( "Enter the digit to print separately :- "); Scanner scan = new Scanner( System.in ); int element1 = scan.nextInt(); int divider; if( ( element1 > 9999 ) && ( element1 <= 99999 ) ) { divider = 10000; } else if( ( element1 > 999 ) && ( element1 <= 9999 ) ) { divider = 1000; } else if ( ( element1 > 99) && ( element1 <= 999 ) ) { divider = 100; } else if( ( element1 > 9 ) && ( element1 <= 99 ) ) { divider = 10; } else { divider = 1; } quotientFinder( element1, divider ); } public static void quotientFinder( int elementValue, int dividerValue ) { for( int count = 1; dividerValue != 0; count++) { int quotientValue = elementValue / dividerValue ; elementValue = elementValue % dividerValue ; System.out.printf( "%d ", quotientValue ); dividerValue /= 10; } } }
不使用数组和string。 (数字1-99999)
输出:
input要单独打印的数字: – 12345
1 2 3 4 5