Tengo números como 1100, 1002, 1022, etc. Me gustaría tener los dígitos individuales, por ejemplo, para el primer número 1100, quiero tener 1, 1, 0, 0.
¿Cómo puedo obtenerlo en Java?
Para hacer esto, usará el %
operador (mod).
int number; // = some int
while (number > 0) {
print( number % 10);
number = number / 10;
}
El operador mod te dará el resto de hacer una división int en un número.
Entonces,
10012 % 10 = 2
Porque:
10012 / 10 = 1001, remainder 2
Nota: Como señaló Paul, esto le dará los números en orden inverso. Tendrá que empujarlos a una pila y sacarlos en orden inverso.
Código para imprimir los números en el orden correcto:
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());
}
Conviértalo a
String
y useString#toCharArray()
oString#split()
.En caso de que ya esté en Java 8 y desee realizar algunas operaciones agregadas en él después, considere usarlo
String#chars()
paraIntStream
salir de él.fuente
split("")
, el primer elemento de la matriz es""
. Use otra expresión regular, comosplit("(?<=.)")
.number.chars()
devolverá el resultado en valores Ascii no numéricos. Para que el número "1234" se divida en "49", "50", "51", "52" en lugar de "1", "2", "3", "4". Para hacerlo bien debería verse así:IntStream chars = number.chars().map(Character::getNumericValue);
¿Qué tal esto?
o en lugar de imprimir en la consola, podemos recopilarlo en una matriz de enteros y luego imprimir la matriz:
Si desea mantener el orden de los dígitos desde el menos significativo (índice [0]) al más significativo (índice [n]), lo siguiente que necesita es getDigits () actualizado:
fuente
+1
+1
if (number < 0) { return new Integer[0]; }
Probado con las siguientes entradas:Integer[] samples = {11111, 123457, 0, -13334, 93846, 87892, 9876543, -1234, 012455};
No he visto a nadie usar este método, pero funcionó para mí y es breve y dulce:
Esto generará:
fuente
0142323
es una constante octal igual a50387
, debido al cero inicial , al igual que0x100
es una constante hexadecimal igual a256
, debido al inicio0x
, y0b1011
es una constante binaria igual a11
debido al inicio0b
. ¡Tenga cuidado con los 0 iniciales en constantes enteras!Noté que hay pocos ejemplos de uso de Java 8 stream para resolver su problema, pero creo que este es el más simple:
Para ser claros: se usa
String.valueOf(number)
para convertir int a String, luego elchars()
método para obtener un IntStream (cada carácter de su cadena ahora es un número Ascii), luego debe ejecutar elmap()
método para obtener valores numéricos del número Ascii. Al final, utiliza eltoArray()
método para cambiar su flujo a una matriz int [].fuente
Veo que todas las respuestas son feas y no muy limpias.
Le sugiero que use un poco de recursividad para resolver su problema. Esta publicación es muy antigua, pero podría ser útil para futuros codificadores.
Salida:
fuente
fuente
La forma más fácil, creo, es convertir el número a cadena y usar
substring
para extraer y luego convertir a entero.Algo como esto:
la salida es 2014
fuente
Escribí un programa que demuestra cómo separar los dígitos de un número entero usando un enfoque más simple y comprensible que no involucra matrices, recursiones y toda esa fantasía sofisticada. Aquí está mi código:
Supongamos que su entrada es el entero
123
, la salida resultante será la siguiente:fuente
Aquí está mi respuesta, lo hice por mí mismo y espero que sea lo suficientemente simple para aquellos que no quieren usar el enfoque de String o necesitan una solución más matemática:
Así que solo obtengo las unidades, las imprimo, las resto del número, luego divido ese número entre 10, que siempre está sin ningún elemento flotante, ya que las unidades se han ido, repita.
fuente
Solución simple
fuente
Prueba esto:
Obtendrá primero = 1, segundo = 2, tercero = 3 y cuarto = 4 ...
fuente
%
. Agrega poco valor.Solución Java 8 para obtener dígitos como int [] desde un entero que tiene como String:
fuente
i -> i - '0'
asignación para que el resultado sea exactamente lo que solicitó el OP.i - '0'
también hay métodos comoCharacter.toDigit
ese IMO son mejores para usar."0123456789".chars().map(i -> Character.digit(i, 10)).toArray()
Carácter # dígito (hay uno para char y otro para int codePoints)ni
chars()
tampococodePoints()
- la otra lambdaString number = Integer.toString( 1100 );
fuente
Java 9 introdujo un nuevo
Stream.iterate
método que puede usarse para generar una secuencia y detenerse en una determinada condición. Esto se puede usar para obtener todos los dígitos en el número, utilizando el enfoque de módulo.Tenga en cuenta que esto obtendrá los dígitos en orden inverso, pero eso se puede resolver ya sea haciendo un bucle a través de la matriz hacia atrás (lamentablemente, invertir una matriz no es tan simple ) o creando otra secuencia:
o
Como ejemplo, este código:
Imprimirá:
fuente
Integer.toString (1100) le da el entero como una cadena. Integer.toString (1100) .getBytes () para obtener una matriz de bytes de los dígitos individuales.
Editar:
Puede convertir los dígitos de caracteres en dígitos numéricos, por lo tanto:
fuente
'1'
o el carácter'0'
. Los valores de byte no serán1
, o0
.Esto utiliza el método del módulo 10 para calcular cada dígito en un número mayor que 0, luego esto invertirá el orden de la matriz. Esto supone que no está utilizando "0" como dígito inicial.
Esto se modifica para tomar la entrada del usuario. Esta matriz se insertó originalmente al revés, por lo que tuve que usar la
Collections.reverse()
llamada para volver a ponerla en el orden del usuario.fuente
Solo para construir sobre el tema, he aquí cómo confirmar que el número es un entero palindrómico en Java:
Estoy seguro de que puedo simplificar aún más este algo. Sin embargo, aquí es donde estoy. Y ha funcionado en todos mis casos de prueba.
Espero que esto ayude a alguien.
fuente
fuente
fuente
vea abajo mi propuesta con comentarios
fuente
Algo como esto devolverá el
char[]
:fuente
Como novato, mi respuesta sería:
Ahora todos los dígitos están contenidos en la matriz de "dígitos".
fuente
¿Por qué no lo haces?
fuente
Como no veo un método en esta pregunta que use Java 8, lo incluiré. Suponiendo que está comenzando con un
String
y desea obtener unList<Integer>
, entonces puede transmitir los elementos así.Esto obtiene los caracteres en
String
forma de aIntStream
, asigna esas representaciones enteras de caracteres a un valor numérico, los encuadra y luego los recopila en una lista.fuente
Collectors.toList()
→ " Discrepancia de tipos: no se puede convertir de Collector <Object, capture # 3-of?, List <Object>> a Supplier <R> ",collect
→ " El método collect (Supplier <R>, ObjIntConsumer <R >, BiConsumer <R, R>) en el tipo IntStream no es aplicable para los argumentos (Collector <Object,?, List <Object>>) "Creo que esta será la forma más útil de obtener dígitos:
Entonces puede obtener dígitos de una manera simple:
o más simplemente:
Observe que el último método llama al método getDigitsOf demasiado tiempo. Entonces será más lento. Debería crear una matriz int y luego llamar al método getDigitsOf una vez, como en el segundo bloque de código.
En el siguiente código, puede revertir el proceso. Este código pone todos los dígitos juntos para hacer el número:
Ambos métodos que he proporcionado también funcionan para números negativos.
fuente
fuente
en Java, así es como puede separar los dígitos de los números y almacenarlos en una matriz.
Salida:
fuente
si el dígito está destinado a ser un
Character
fuente
Pattern.compile
? Eso es mucha exageración.Sin usar matrices y cadenas. (dígitos 1-99999)
salida:
Ingrese el dígito para imprimir por separado: - 12345
1 2 3 4 5
fuente
divider
.