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 kann ich es in Java bekommen?
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 Zahl.
So,
10012 % 10 = 2
Weil:
10012 / 10 = 1001, remainder 2
Hinweis: Wie Paul bemerkt hat, erhalten Sie die Zahlen in umgekehrter Reihenfolge. Sie müssen sie auf einen Stapel schieben und in umgekehrter Reihenfolge ablegen.
Code zum Drucken der Nummern 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());
}
Konvertieren Sie es in
String
und verwenden SieString#toCharArray()
oderString#split()
.Falls Sie sich bereits auf Java 8 und Sie passieren wollen einige Aggregate Operationen auf , es zu tun danach prüfen , mit
String#chars()
einem umIntStream
aus ihn heraus.quelle
split("")
ist das erste Element im Array""
. Verwenden Sie einen anderen regulären Ausdruck wiesplit("(?<=.)")
.number.chars()
gibt das Ergebnis in einem Ascii-Wert zurück, der nicht numerisch ist. Damit wird die Zahl "1234" in "49", "50", "51", "52" anstelle von "1", "2", "3", "4" aufgeteilt. Um es richtig zu machen, sollte es so aussehen:IntStream chars = number.chars().map(Character::getNumericValue);
Wie wäre es damit?
oder anstatt auf der Konsole zu drucken, können wir es in einem Array von Ganzzahlen sammeln und dann das Array drucken:
Wenn Sie die Reihenfolge der Ziffern von niedrigstwertig (Index [0]) bis höchstwertig (Index [n]) beibehalten möchten, benötigen Sie die folgenden aktualisierten getDigits ():
quelle
+1
+1
if (number < 0) { return new Integer[0]; }
Getestet mit folgenden Eingaben:Integer[] samples = {11111, 123457, 0, -13334, 93846, 87892, 9876543, -1234, 012455};
Ich habe noch niemanden gesehen, der diese Methode angewendet hat, aber sie hat bei mir funktioniert und ist kurz und bündig:
Dies wird Folgendes ausgeben:
quelle
0142323
ist ein oktaler Konstante gleich50387
aufgrund der führenden Null, so wie0x100
ein konstanten hexadezimal gleich256
aufgrund des führenden0x
und0b1011
ist eine binäre Konstante gleich11
zu dem führenden zurückzuführen0b
. Seien Sie vorsichtig, wenn Sie Nullen für ganzzahlige Konstanten führen!Ich habe festgestellt, dass es nur wenige Beispiele für die Verwendung von Java 8-Streams gibt, um Ihr Problem zu lösen, aber ich denke, dass dies das einfachste ist:
Um es klar zu sagen : Sie
String.valueOf(number)
konvertieren int in String, dann diechars()
Methode, um einen IntStream zu erhalten (jedes Zeichen aus Ihrer Zeichenfolge ist jetzt eine Ascii-Nummer), und müssen dann diemap()
Methode ausführen , um numerische Werte der Ascii-Nummer zu erhalten. Am Ende verwenden Sie dietoArray()
Methode, um Ihren Stream in ein int [] -Array zu ändern.quelle
Ich sehe alle Antworten sind hässlich und nicht sehr sauber.
Ich schlage vor, Sie verwenden ein wenig Rekursion , um Ihr Problem zu lösen. Dieser Beitrag ist sehr alt, könnte aber für zukünftige Programmierer hilfreich sein.
Ausgabe:
quelle
quelle
Ich denke, es ist einfacher, die Zahl in einen String zu konvertieren und sie
substring
zu extrahieren und dann in eine Ganzzahl zu konvertieren.Etwas wie das:
Ausgabe ist 2014
quelle
Ich habe ein Programm geschrieben, das zeigt, wie man die Ziffern einer ganzen Zahl mit einem einfacheren und verständlicheren Ansatz trennt, der keine Arrays, Rekursionen und all diese ausgefallenen Schmancy beinhaltet. Hier ist mein Code:
Angenommen, Ihre Eingabe ist die Ganzzahl
123
, die resultierende Ausgabe lautet wie folgt:quelle
Hier ist meine Antwort, ich habe es für mich selbst getan und ich hoffe, es ist einfach genug für diejenigen, die den String-Ansatz nicht verwenden möchten oder eine mathematischere Lösung benötigen:
Also hole ich einfach die Einheiten, drucke sie aus, subtrahiere sie von der Zahl und dividiere diese Zahl durch 10 - was immer ohne schwebendes Zeug ist, da die Einheiten weg sind, wiederhole.
quelle
einfache Lösung
quelle
Versuche dies:
Sie erhalten zuerst = 1, zweitens = 2, drittens = 3 und viertens = 4 ....
quelle
%
. Es schafft wenig Wert.Java 8-Lösung zum Abrufen von Ziffern als int [] aus einer Ganzzahl, die Sie als Zeichenfolge haben:
quelle
i -> i - '0'
so aktualisiert, dass sie eine Zuordnung enthält, sodass das Ergebnis genau den Anforderungen des OP entspricht.i - '0'
gibt es auch Methoden wie dieseCharacter.toDigit
, die IMO besser zu verwenden sind."0123456789".chars().map(i -> Character.digit(i, 10)).toArray()
Character # digit (es gibt eine für char und eine für int codePoints)weder
chars()
nochcodePoints()
- das andere LambdaString number = Integer.toString( 1100 );
quelle
Java 9 führte eine neue
Stream.iterate
Methode ein, mit der ein Stream generiert und unter bestimmten Bedingungen gestoppt werden kann. Dies kann verwendet werden, um alle Ziffern in der Zahl unter Verwendung des Modulo-Ansatzes zu erhalten.Beachten Sie, dass dadurch die Ziffern in umgekehrter Reihenfolge angezeigt werden. Dies kann jedoch entweder durch Rückwärtsschleifen des Arrays (leider ist das Umkehren eines Arrays nicht so einfach ) oder durch Erstellen eines anderen Streams gelöst werden :
oder
Als Beispiel dieser Code:
Wird drucken:
quelle
Integer.toString (1100) gibt Ihnen die Ganzzahl als Zeichenfolge an. Integer.toString (1100) .getBytes () , um ein Array von Bytes der einzelnen Ziffern abzurufen .
Bearbeiten:
Sie können die Ziffern in numerische Ziffern umwandeln, also:
quelle
'1'
oder darstellen'0'
. Die Bytewerte werden nicht sein1
, oder0
.Dies verwendet die Modulo 10-Methode, um jede Ziffer in einer Zahl größer als 0 zu ermitteln. Dadurch wird die Reihenfolge des Arrays umgekehrt. Dies setzt voraus, dass Sie nicht "0" als Startziffer verwenden.
Dies wird geändert, um Benutzereingaben zu berücksichtigen. Dieses Array wurde ursprünglich rückwärts eingefügt, daher musste ich den
Collections.reverse()
Aufruf verwenden, um es wieder in die Reihenfolge des Benutzers zu bringen.quelle
Um auf dem Thema aufzubauen, können Sie hier bestätigen, dass die Zahl in Java eine palindromische Ganzzahl ist:
Ich bin sicher, ich kann dieses Algo weiter vereinfachen. Doch hier bin ich. Und es hat unter all meinen Testfällen funktioniert.
Ich hoffe das hilft jemandem.
quelle
quelle
quelle
siehe unten meinen Vorschlag mit Kommentaren
quelle
So etwas wird Folgendes zurückgeben
char[]
:quelle
Als Noob wäre meine Antwort:
Jetzt sind alle Ziffern im Array "Ziffern" enthalten.
quelle
Warum tust du nicht:
quelle
Da ich in dieser Frage keine Methode sehe, die Java 8 verwendet, werde ich diese einwerfen. Angenommen, Sie beginnen mit a
String
und möchten eine erhaltenList<Integer>
, dann können Sie die Elemente wie folgt streamen.Dadurch werden die Zeichen in
String
as asIntStream
abgerufen, diese ganzzahligen Darstellungen von Zeichen einem numerischen Wert zugeordnet, sie werden in Kästchen verpackt und anschließend in einer Liste zusammengefasst.quelle
Collectors.toList()
→ " Typinkongruenz: Konvertierung von Collector <Objekt, Erfassung Nr. 3 von ?, Liste <Objekt>> zu Lieferant <R> nicht möglich ",collect
→ " Die Methode collect (Lieferant <R>, ObjIntConsumer <R >, BiConsumer <R, R>) vom Typ IntStream gilt nicht für die Argumente (Collector <Object,?, List <Object>>) "Ich denke, dies ist der nützlichste Weg, um Ziffern zu erhalten:
Dann können Sie auf einfache Weise Ziffern erhalten:
oder einfacher:
Beachten Sie, dass die letzte Methode die getDigitsOf-Methode zu lange aufruft. Es wird also langsamer sein. Sie sollten ein int-Array erstellen und dann die getDigitsOf-Methode einmal aufrufen, genau wie im zweiten Codeblock.
Im folgenden Code können Sie die Verarbeitung rückgängig machen. Dieser Code setzt alle Ziffern zusammen, um die Nummer zu bilden:
Beide Methoden, die ich bereitgestellt habe, funktionieren auch für negative Zahlen.
quelle
quelle
In Java können Sie auf diese Weise Ziffern von Zahlen trennen und in einem Array speichern.
Ausgabe:
quelle
wenn die Ziffer a sein soll
Character
quelle
Pattern.compile
? Das ist viel Overkill.Ohne Verwendung von Arrays und Strings. (Ziffern 1-99999)
Ausgabe :
Geben Sie die Ziffer ein, die separat gedruckt werden soll: - 12345
1 2 3 4 5
quelle
divider
.