Eu tenho um String
objeto Java . Eu preciso extrair apenas dígitos dele. Vou dar um exemplo:
"123-456-789"
eu quero "123456789"
Existe uma função de biblioteca que extrai apenas dígitos?
Obrigado pelas respostas. Antes de experimentar, preciso saber se tenho que instalar alguma biblioteca adicional?
str = str.replaceAll("[^\\.0123456789]","");
(?!\\.)
Aqui está uma solução mais detalhada. Menos elegante, mas provavelmente mais rápido:
Código do teste:
Resultado:
BTW: Eu não usei Character.isDigit (ch) porque ele aceita muitos outros caracteres, exceto 0 - 9.
fonte
StringBuilder
construtor (comoinput.length()
) para garantir que ele não precise ser realocado. Você não precisa exigir umString
aqui;CharSequence
é suficiente. Além disso, você pode separar a alocação doStringBuilder
da coleção de não dígitos, escrevendo uma função separada que aceite aCharSequence
como entrada e umaAppendable
instância como um acumulador de saída.fonte
Usando o Google Guava:
ATUALIZAR:
O uso do CharMatcher pré-computado pode melhorar ainda mais o desempenho
fonte
Charmatcher.DIGIT
predefinido.Isso ignorará os pontos decimais.
por exemplo: se você tiver uma entrada como
445.3kg
será a saída445.3
.fonte
Usando o Google Guava:
O CharMatcher é plugável e bastante interessante de usar, por exemplo, você pode fazer o seguinte:
saída == 123-456-789
fonte
Use expressão regular para corresponder aos seus requisitos.
fonte
Inspirei-me no código Sean Patrick Floyd e pouco o reescrevi para obter o máximo desempenho que recebo.
Eu faço o teste de desempenho para uma string muito longa com números mínimos e o resultado é:
Btw depende de quanto tempo essa cadeia é. Com uma string que contém apenas 6 números, a goiaba é 50% mais lenta e a regexp 1 vezes mais lenta
fonte
Saída: 11
fonte
Você pode usar
str.replaceAll("[^0-9]", "");
fonte
Finalizei o código para os números de telefone +9 (987) 124124.
Caracteres Unicode ocupam 4 bytes.
fonte
Código:
fonte
fonte