Eu tenho números como 1100, 1002, 1022 etc. Gostaria de ter os dígitos individuais, por exemplo, para o primeiro número 1100, quero ter 1, 1, 0, 0.
Como posso obtê-lo em Java?
Para fazer isso, você usará o %
operador (mod).
int number; // = some int
while (number > 0) {
print( number % 10);
number = number / 10;
}
O operador mod lhe dará o restante da divisão int em um número.
Assim,
10012 % 10 = 2
Porque:
10012 / 10 = 1001, remainder 2
Nota: Como Paulo observou, isso fornecerá os números na ordem inversa. Você precisará empurrá-los para uma pilha e retirá-los na ordem inversa.
Código para imprimir os números na ordem correta:
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());
}
Converta-o em
String
e useString#toCharArray()
ouString#split()
.Caso você já esteja no Java 8 e deseje realizar algumas operações agregadas posteriormente, considere usar
String#chars()
para obter umIntStream
resultado.fonte
split("")
, o primeiro item da matriz é""
. Use outro regex, comosplit("(?<=.)")
.number.chars()
retornará o resultado em valores Ascii não numéricos. Para que o número "1234" seja dividido em "49", "50", "51", "52" em vez de "1", "2", "3", "4". Para fazer isso da maneira correta, deve ser parecido com: #IntStream chars = number.chars().map(Character::getNumericValue);
Que tal agora?
ou, em vez de imprimir no console, podemos coletá-lo em uma matriz de números inteiros e depois imprimir a matriz:
Se você deseja manter a ordem dos dígitos de menos significativo (índice [0]) para mais significativo (índice [n]), o seguinte getDigits () atualizado é o que você precisa:
fonte
+1
+1
if (number < 0) { return new Integer[0]; }
Testado com as seguintes entradas:Integer[] samples = {11111, 123457, 0, -13334, 93846, 87892, 9876543, -1234, 012455};
Não vi ninguém usar esse método, mas funcionou para mim e é curto e gentil:
Isso produzirá:
fonte
0142323
é uma constante octal igual a50387
, devido ao zero inicial, assim como0x100
é uma constante hexadecimal igual a256
, devido à liderança0x
, e0b1011
é uma constante binária igual a11
devido à liderança0b
. Desconfie de zeros à esquerda em constantes inteiras!Notei que existem poucos exemplos de uso do fluxo Java 8 para resolver seu problema, mas acho que este é o mais simples:
Para ficar claro: você usa
String.valueOf(number)
para converter int em String e, em seguida,chars()
método para obter um IntStream (cada caractere de sua string agora é um número Ascii), depois é necessário executar omap()
método para obter valores numéricos do número Ascii. No final, você usa otoArray()
método para alterar seu fluxo em uma matriz int [].fonte
Vejo que todas as respostas são feias e não muito limpas.
Sugiro que você use um pouco de recursão para resolver seu problema. Esta publicação é muito antiga, mas pode ser útil para futuros codificadores.
Resultado:
fonte
fonte
A maneira mais fácil que eu acho é converter o número em string e usar
substring
para extrair e depois converter para número inteiro.Algo assim:
ouput é 2014
fonte
Eu escrevi um programa que demonstra como separar os dígitos de um número inteiro usando uma abordagem mais simples e compreensível que não envolva matrizes, recursões e toda a schmancy sofisticada. Aqui está o meu código:
Suponha que sua entrada seja o número inteiro
123
, a saída resultante será a seguinte:fonte
Aqui está a minha resposta, eu fiz isso por mim mesmo e espero que seja simples o suficiente para aqueles que não querem usar a abordagem String ou precisam de uma solução mais matemática:
Então, eu apenas pego as unidades, imprimo-as, subtraí-as do número e, em seguida, divido esse número por 10 - o que é sempre sem nenhum material flutuante, já que as unidades se foram, repita.
fonte
solução simples
fonte
Tente o seguinte:
Você receberá primeiro = 1, segundo = 2, terceiro = 3 e quarto = 4 ....
fonte
%
. Agrega pouco valor.Solução Java 8 para obter dígitos como int [] de um número inteiro que você possui como uma String:
fonte
i -> i - '0'
mapeamento para que o resultado seja exatamente o que o OP solicitou.i - '0'
, também existem métodos comoCharacter.toDigit
o IMO que são melhores para usar."0123456789".chars().map(i -> Character.digit(i, 10)).toArray()
Caractere # dígito (existe um para char e outro para int codePoints)nem
chars()
nemcodePoints()
- o outro lambdaString number = Integer.toString( 1100 );
fonte
O Java 9 introduziu um novo
Stream.iterate
método que pode ser usado para gerar um fluxo e parar em uma determinada condição. Isso pode ser usado para obter todos os dígitos do número, usando a abordagem de módulo.Observe que isso obterá os dígitos na ordem inversa, mas isso pode ser resolvido fazendo um loop pela matriz para trás (inverter tristemente uma matriz é não tão simples ) ou criar outro fluxo:
ou
Como exemplo, este código:
Irá imprimir:
fonte
Integer.toString (1100) fornece o número inteiro como uma sequência. Integer.toString (1100) .getBytes () para obter uma matriz de bytes dos dígitos individuais.
Editar:
Você pode converter os dígitos dos caracteres em dígitos numéricos, assim:
fonte
'1'
ou'0'
. Os valores de bytes não serão1
, ou0
.Isso usa o método do módulo 10 para descobrir cada dígito em um número maior que 0, e isso reverterá a ordem da matriz. Isso pressupõe que você não esteja usando "0" como dígito inicial.
Isso é modificado para receber a entrada do usuário. Essa matriz é originalmente inserida ao contrário, então tive que usar a
Collections.reverse()
chamada para colocá-la novamente na ordem do usuário.fonte
Apenas para desenvolver o assunto, veja como confirmar que o número é um número inteiro palíndrico em Java:
Tenho certeza de que posso simplificar ainda mais esse algo. No entanto, é aqui que estou. E funcionou em todos os meus casos de teste.
Espero que isso ajude alguém.
fonte
fonte
fonte
veja abaixo minha proposta com comentários
fonte
Algo assim retornará
char[]
:fonte
Como noob, minha resposta seria:
Agora todos os dígitos estão contidos na matriz "dígitos".
fonte
Por que você não faz:
fonte
Como não vejo um método nesta questão que usa o Java 8, abordarei isso. Supondo que você esteja começando com a
String
e queira obter aList<Integer>
, poderá transmitir os elementos dessa maneira.Este recebe os caracteres no
String
como umIntStream
, mapeia essas representações inteiros de caracteres para um valor numérico, caixas-los, e depois recolhe-los em uma lista.fonte
Collectors.toList()
→ " Incompatibilidade de tipo: não é possível converter do coletor <Objeto, captura # 3-de?, Lista <Objeto>> para fornecedor <R> ",collect
→ " O método collect (Fornecedor <R>, ObjIntConsumer <R >, BiConsumer <R, R>) no tipo IntStream não é aplicável aos argumentos (Coletor <Objeto,?, Lista <Objeto>>) "Eu acho que essa será a maneira mais útil de obter dígitos:
Então você pode obter dígitos de uma maneira simples:
ou mais simplesmente:
Observe que o último método chama muito tempo o método getDigitsOf. Então será mais lento. Você deve criar uma matriz int e chamar o método getDigitsOf uma vez, assim como no segundo bloco de código.
No código a seguir, você pode reverter para o processo. Este código reúne todos os dígitos para formar o número:
Ambos os métodos que forneci também funcionam para números negativos.
fonte
fonte
em Java, é assim que você pode separar dígitos de números e armazená-los em uma matriz.
Resultado:
fonte
se o dígito for um
Character
fonte
Pattern.compile
? Isso é muito exagero.Sem usar matrizes e Strings. (dígitos 1-99999)
resultado :
Digite o dígito para imprimir separadamente: - 12345
1 2 3 4 5
fonte
divider
.