J'ai des nombres comme 1100, 1002, 1022 etc. Je voudrais avoir les chiffres individuels, par exemple pour le premier numéro 1100 je veux avoir 1, 1, 0, 0.
Comment puis-je l'obtenir en Java?
Pour ce faire, vous utiliserez l' %
opérateur (mod).
int number; // = some int
while (number > 0) {
print( number % 10);
number = number / 10;
}
L'opérateur de mod vous donnera le reste de la division int sur un nombre.
Alors,
10012 % 10 = 2
Car:
10012 / 10 = 1001, remainder 2
Remarque: comme Paul l'a noté, cela vous donnera les nombres dans l'ordre inverse. Vous devrez les pousser sur une pile et les faire sortir dans l'ordre inverse.
Code pour imprimer les nombres dans le bon ordre:
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());
}
Convertissez-le en
String
et utilisezString#toCharArray()
ouString#split()
.Si vous êtes déjà sur Java 8 et que vous souhaitez effectuer des opérations d'agrégation sur celui-ci par la suite, envisagez d'utiliser
String#chars()
pour en extraire unIntStream
.la source
split("")
, le premier élément du tableau est""
. Utilisez une autre expression régulière, commesplit("(?<=.)")
.number.chars()
renverra le résultat dans une valeur Ascii et non numérique. De sorte que le nombre "1234" sera divisé en "49", "50", "51", "52" au lieu de "1", "2", "3", "4". Pour faire les choses correctement, cela devrait ressembler à:IntStream chars = number.chars().map(Character::getNumericValue);
Que dis-tu de ça?
ou au lieu d'imprimer sur la console, nous pouvons le collecter dans un tableau d'entiers puis imprimer le tableau:
Si vous souhaitez conserver l'ordre des chiffres du moins significatif (index [0]) au plus significatif (index [n]), vous avez besoin de getDigits () mis à jour:
la source
+1
+1
if (number < 0) { return new Integer[0]; }
Testé avec les entrées suivantes:Integer[] samples = {11111, 123457, 0, -13334, 93846, 87892, 9876543, -1234, 012455};
Je n'ai vu personne utiliser cette méthode, mais cela a fonctionné pour moi et est court et doux:
Cela produira:
la source
0142323
est une constante octale égale à50387
, en raison du zéro de début , tout comme0x100
une constante hexadécimale égale à256
, en raison du début0x
, et0b1011
est une constante binaire égale à11
due au début0b
. Méfiez-vous des 0 en tête sur les constantes entières!J'ai remarqué qu'il existe peu d'exemples d'utilisation du flux Java 8 pour résoudre votre problème, mais je pense que c'est le plus simple:
Pour être clair: vous utilisez
String.valueOf(number)
pour convertir un int en chaîne, puis unechars()
méthode pour obtenir un IntStream (chaque caractère de votre chaîne est maintenant un nombre Ascii), puis vous devez exécuter unemap()
méthode pour obtenir une valeur numérique du nombre Ascii. À la fin, vous utilisez latoArray()
méthode pour changer votre flux en un tableau int [].la source
Je vois que toutes les réponses sont laides et pas très propres.
Je vous suggère d'utiliser un peu de récursivité pour résoudre votre problème. Cet article est très ancien, mais il pourrait être utile aux futurs codeurs.
Production:
la source
la source
Un moyen plus simple, je pense, est de convertir le nombre en chaîne et de l'utiliser
substring
pour extraire puis convertir en entier.Quelque chose comme ça:
la sortie est 2014
la source
solution simple
la source
J'ai écrit un programme qui montre comment séparer les chiffres d'un entier en utilisant une approche plus simple et compréhensible qui n'implique pas de tableaux, de récursions, et tout ce schmancy sophistiqué. Voici mon code:
Supposons que votre entrée soit l'entier
123
, la sortie résultante sera la suivante:la source
Voici ma réponse, je l'ai fait pour moi-même et j'espère que c'est assez simple pour ceux qui ne veulent pas utiliser l'approche String ou qui ont besoin d'une solution plus mathématique:
Donc, je viens de récupérer les unités, de les imprimer, de les soustraire du nombre, puis de diviser ce nombre par 10 - ce qui est toujours sans aucun élément flottant, puisque les unités ont disparu, répétez.
la source
Essaye ça:
Vous obtiendrez premier = 1, deuxième = 2, troisième = 3 et quatrième = 4 ....
la source
%
. Cela ajoute peu de valeur.Solution Java 8 pour obtenir des chiffres comme int [] à partir d'un entier que vous avez comme chaîne:
la source
i -> i - '0'
cartographie afin que le résultat soit exactement ce que le PO a demandé.i - '0'
il est égalementCharacter.toDigit
préférable d'utiliser des méthodes comme celle de l'OMI."0123456789".chars().map(i -> Character.digit(i, 10)).toArray()
Character # digit (il y en a un pour char et un pour int codePoints)ni
chars()
nicodePoints()
- l'autre lambdaString number = Integer.toString( 1100 );
la source
Java 9 a introduit une nouvelle
Stream.iterate
méthode qui peut être utilisée pour générer un flux et s'arrêter à une certaine condition. Cela peut être utilisé pour obtenir tous les chiffres du nombre, en utilisant l'approche modulo.Notez que cela obtiendra les chiffres dans l'ordre inverse, mais cela peut être résolu soit en bouclant le tableau à l'envers (malheureusement, inverser un tableau n'est pas si simple ), soit en créant un autre flux:
ou
A titre d'exemple, ce code:
Imprime:
la source
Integer.toString (1100) vous donne l'entier sous forme de chaîne. Integer.toString (1100) .getBytes () pour obtenir un tableau d'octets des chiffres individuels.
Éditer:
Vous pouvez convertir les chiffres des caractères en chiffres numériques, ainsi:
la source
'1'
ou'0'
. Les valeurs d'octet ne seront pas1
, ou0
.Cela utilise la méthode modulo 10 pour comprendre chaque chiffre dans un nombre supérieur à 0, cela inversera l'ordre du tableau. Cela suppose que vous n'utilisez pas "0" comme chiffre de départ.
Ceci est modifié pour prendre en compte l'entrée utilisateur. Ce tableau est à l'origine inséré à l'envers, j'ai donc dû utiliser l'
Collections.reverse()
appel pour le remettre dans l'ordre de l'utilisateur.la source
Juste pour construire sur le sujet, voici comment confirmer que le nombre est un entier palindromique en Java:
Je suis sûr que je peux simplifier davantage cet algo. Pourtant, c'est là que je suis. Et cela a fonctionné dans tous mes cas de test.
J'espère que ça aidera quelqu'un.
la source
la source
la source
voir ci-dessous ma proposition avec des commentaires
la source
Quelque chose comme ceci renverra le
char[]
:la source
En tant que noob, ma réponse serait:
Maintenant, tous les chiffres sont contenus dans le tableau "digits".
la source
Pourquoi tu ne fais pas:
la source
Comme je ne vois pas de méthode sur cette question qui utilise Java 8, je vais la jeter. En supposant que vous commencez par a
String
et que vous voulez obtenir aList<Integer>
, alors vous pouvez diffuser les éléments comme ça.Cela obtient les caractères dans le
String
sous forme deIntStream
, mappe ces représentations entières de caractères à une valeur numérique, les encadre, puis les rassemble dans une liste.la source
Collectors.toList()
→ " Incompatibilité de type: impossible de convertir de Collector <Object, capture # 3-of?, List <Object>> to Supplier <R> ",collect
→ " La méthode collect (Supplier <R>, ObjIntConsumer <R >, BiConsumer <R, R>) dans le type IntStream n'est pas applicable pour les arguments (Collector <Object,?, List <Object>>) "Je pense que ce sera le moyen le plus utile d'obtenir des chiffres:
Ensuite, vous pouvez obtenir des chiffres de manière simple:
ou plus simplement:
Notez que la dernière méthode appelle la méthode getDigitsOf trop longtemps. Ce sera donc plus lent. Vous devez créer un tableau int, puis appeler la méthode getDigitsOf une fois, comme dans le deuxième bloc de code.
Dans le code suivant, vous pouvez inverser le processus. Ce code rassemble tous les chiffres pour former le numéro:
Les deux méthodes que j'ai fournies fonctionnent également pour les nombres négatifs.
la source
la source
en Java, voici comment séparer les chiffres des nombres et les stocker dans un tableau.
Production:
la source
si le chiffre est censé être un
Character
la source
Pattern.compile
? C'est beaucoup exagéré.Sans utiliser de tableaux et de chaînes. (chiffres 1-99999)
production :
Entrez le chiffre à imprimer séparément: - 12345
1 2 3 4 5
la source
divider
.