webentwicklung-frage-antwort-db.com.de

Wie bekomme ich die einzelnen Ziffern einer Int-Nummer?

Ich habe Nummern wie 1100, 1002, 1022 usw. Ich möchte die einzelnen Ziffern haben, zum Beispiel für die erste Nummer 1100, die ich 1, 1, 0, 0 haben möchte.

Wie bekomme ich es in Java?

107
Edy Moore

Dazu verwenden Sie den Operator % (mod).

int number; // = some int

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

Der Mod-Operator gibt Ihnen den Rest der Int Division für eine Nummer.

So,

10012 % 10 = 2

Weil:

10012 / 10 = 1001, remainder 2

Hinweis: Wie Paulus bemerkt, werden Ihnen die Zahlen in umgekehrter Reihenfolge angezeigt. Sie müssen sie auf einen Stapel schieben und in umgekehrter Reihenfolge ablegen.

Code zum Drucken der Zahlen in der richtigen Reihenfolge:

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());
}
167
jjnguy

Konvertieren Sie es nach String und verwenden Sie String#toCharArray() oder String#split() .

String number = String.valueOf(someInt);

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

Falls Sie bereits mit Java 8 arbeiten und nachher einige Operationen daran durchführen möchten, sollten Sie String#chars() verwenden, um eine IntStream daraus zu ziehen.

IntStream chars = number.chars();
65
BalusC

Wie wäre es damit?

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

oder anstatt auf der Konsole zu drucken, können wir sie in einem Array von Ganzzahlen sammeln und dann das Array drucken:

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);
}

Wenn Sie die Reihenfolge der Ziffern von niedrigstwertigem (Index [0]) bis höchstwertigem (Index [n]) beibehalten möchten, benötigen Sie die folgenden aktualisierten getDigits ():

/**
 * split an integer into its individual digits
 * NOTE: digits order is maintained - i.e. Least significant digit is at index[0]
 * @param num positive integer
 * @return array of digits
 */
public static Integer[] getDigits(int num) {
    if (num < 0) { return new Integer[0]; }
    List<Integer> digits = new ArrayList<Integer>();
    collectDigits(num, digits);
    Collections.reverse(digits);
    return digits.toArray(new Integer[]{});
}
25

Ich habe niemanden gesehen, der diese Methode benutzt, aber es hat für mich funktioniert und ist kurz und süß: 

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);
}

Dies wird ausgegeben: 

digit: 5
digit: 5
digit: 4
digit: 2
17
espiering

Mir ist aufgefallen, dass es einige Beispiele für die Verwendung von Java 8-Stream gibt, um Ihr Problem zu lösen, aber ich denke, dass dies das einfachste ist:

int[] intTab = String.valueOf(number).chars().map(Character::getNumericValue).toArray();

Um es klar zu sagen: Sie konvertieren int in String mit String.valueOf(number) und dann mit chars() ein IntStream (jedes Zeichen in Ihrer Zeichenfolge ist jetzt eine ASCII-Zahl). Anschließend müssen Sie die map()-Methode ausführen, um numerische Werte des Ascii-Nummer. Am Ende verwenden Sie die toArray()-Methode, um Ihren Stream in ein int [] -Array zu ändern.

5
Koin Arab
// 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);
5
Jonathan Norman

Ich sehe alle Antworten sind hässlich und nicht sehr sauber.

Ich schlage vor, dass Sie ein wenig von rekursion verwenden, um Ihr Problem zu lösen. Dieser Beitrag ist sehr alt, kann aber für zukünftige Programmierer hilfreich sein.

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

Ausgabe:

Input: 12345

Output: 1   2   3   4   5 
4
Starlord

Ich denke, es ist einfacher, die Zahl in einen String umzuwandeln und substring zu extrahieren und dann in eine Ganzzahl zu konvertieren.

Etwas wie das:

int digits1 =Integer.parseInt( String.valueOf(201432014).substring(0,4));
    System.out.println("digits are: "+digits1);

ausgabe ist 2014

3
Siva

Ich habe ein Programm geschrieben, das zeigt, wie die Ziffern einer Ganzzahl mit einem einfacheren und verständlicheren Ansatz getrennt werden, der keine Arrays, Rekursionen und all diese ausgefallenen Schmancy beinhaltet. Hier ist mein Code:

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);
}

Angenommen, Ihre Eingabe ist die Ganzzahl 123. Die Ausgabe lautet wie folgt:

1
2
3
2
Forever Alone

Hier ist meine Antwort, ich habe es für mich getan und ich hoffe, es ist einfach genug für diejenigen, die nicht den String-Ansatz verwenden möchten oder eine mathematischere Lösung benötigen:

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);
    }
}

Also hol ich mir die Einheiten, drucke sie aus, subtrahiere sie von der Zahl und teile sie dann durch 10 - was immer ohne schwebende Sachen ist, da Einheiten weg sind, wiederhole.

2
parsecer

Java 8-Lösung zum Abrufen von Ziffern als int [] aus einer Ganzzahl, die Sie als String haben:

int[] digits = intAsString.chars().map(i -> i - '0').toArray();
1
qben

So etwas wird den char[] zurückgeben:

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();
}
0
Pritam Banerjee

wederchars()nochcodePoints()- das andere Lambda

String number = Integer.toString( 1100 );

IntStream.range( 0, number.length() ).map( i -> Character.digit( number.codePointAt( i ), 10 ) ).toArray();  // [1, 1, 0, 0]
0
Kaplan
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;
}
0
Dushyant
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;
}
0
Shibashis

Versuche dies:

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;

Sie erhalten zuerst = 1, Sekunde = 2, dritte = 3 und vierte = 4 ....

0
yanisB

Diese Methode verwendet die modulo 10-Methode, um jede Ziffer in einer Zahl größer als 0 herauszufinden. Dadurch wird die Reihenfolge des Arrays umgekehrt. Dies setzt voraus, dass Sie nicht "0" als Startziffer verwenden.

Dies wurde geändert, um die Benutzereingaben zu übernehmen. Dieses Array wurde ursprünglich rückwärts eingefügt. Daher musste ich den Aufruf Collections.reverse() verwenden, um es wieder in die Reihenfolge des Benutzers zu bringen.

    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);
0
Simple Sandman

Da ich zu dieser Frage keine Methode sehe, die Java 8 verwendet, werfe ich dies ein. Wenn Sie davon ausgehen, dass Sie mit einer String beginnen und einen List<Integer> erhalten möchten, können Sie die Elemente so streamen.

List<Integer> digits = digitsInString.chars().map(Character::getNumericValue)
                            .collect(Collectors.toList());

Dadurch werden die Zeichen in String als IntStream abgerufen, diese Ganzzahldarstellungen von Zeichen einem numerischen Wert zugeordnet und dann in einer Liste zusammengefasst.

0
ifly6

siehe unten meinen Vorschlag mit Kommentaren

          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()+ " ");
                }
0
SocketM

Integer.toString (1100) gibt die Ganzzahl als String an. Integer.toString (1100) .getBytes () , um ein Byte-Array der einzelnen Ziffern zu erhalten.

Bearbeiten:

Sie können die Zeichenziffern in numerische Ziffern umwandeln, also:

  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));
0
Don Branson

Um nur auf das Thema einzugehen, wie Sie bestätigen, dass die Zahl eine palindromische Ganzzahl in Java ist:

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

Ich bin mir sicher, dass ich diese Regel weiter vereinfachen kann. Aber hier bin ich. Und es hat bei allen meinen Testfällen funktioniert.

Ich hoffe das hilft jemandem.

0
jmarcosSF