Procurando uma maneira rápida e simples em Java para alterar essa sequência
" hello there "
para algo que se parece com isso
"hello there"
onde eu substituo todos esses espaços múltiplos por um único espaço, exceto que também quero que um ou mais espaços no início da string sejam removidos.
Algo assim me deixa parcialmente lá
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
mas não exatamente.
Respostas:
Tente o seguinte:
Veja também
String.trim()
Sem
trim()
regexTambém é possível fazer isso com apenas um
replaceAll
, mas isso é muito menos legível que atrim()
solução. No entanto, é fornecido aqui apenas para mostrar o que a regex pode fazer:Existem 3 alternativas:
^_+
: qualquer sequência de espaços no início da sequência$1
, que captura a sequência vazia_+$
: qualquer sequência de espaços no final da sequência$1
, que captura a sequência vazia(_)+
: qualquer sequência de espaços que não corresponda a nenhuma das opções acima, o que significa que está no meio$1
, que captura um único espaçoVeja também
fonte
trim()
e, em seguida,replaceAll()
usa menos memória do que o contrário. Não muito, mas se isso for chamado muitas vezes, pode aumentar, especialmente se houver muitos "espaços em branco ajustáveis". (Trim()
Não realmente se livrar do espaço extra - ele só esconde-lo, movendo os valores inicial e final do subjacente.char[]
Permanece inalterado.)( ) +
ou( ){2,}
deve ser um (muito) pouco mais eficiente;)\\s
substituirá qualquer grupo de espaços em branco pelo caractere desejado..trim().replaceAll(" +", " ")
(com dois espaços) é mais rápido que.trim().replaceAll(" +", " ")
(com um espaço). Executei testes de temporização em strings que tinham apenas espaços únicos e todos os espaços duplos, e ele veio substancialmente mais rápido para ambos ao realizar muitas operações (milhões ou mais, dependendo do ambiente).Você só precisa de:
onde você corresponde a um ou mais espaços, substitui-os por um único espaço e, em seguida, apara os espaços em branco no início e no final (você pode inverter primeiro aparando e depois combinando para tornar a regex mais rápida, como alguém apontou).
Para testar isso, tente rapidamente:
e retornará:
fonte
Use o
StringUtils.normalizeSpace(String str)
método Apache commons . Veja os documentos aquifonte
Isso funcionou perfeitamente para mim:
sValue = sValue.trim().replaceAll("\\s+", " ");
fonte
Isso corresponderá a mais de um espaço.
RESULTADO:
fonte
Para eliminar espaços no início e no final da String, use o
String#trim()
método E então use o seumytext.replaceAll("( )+", " ")
.fonte
Você pode primeiro usar
String.trim()
e, em seguida, aplicar o comando regex replace no resultado.fonte
O código a seguir compactará qualquer espaço em branco entre as palavras e removerá qualquer no início e no final da string
Isso produzirá
a string with many spaces, a tab and a newline
Observe que quaisquer caracteres não imprimíveis, incluindo espaços, guias e novas linhas, serão compactados ou removidos
Para mais informações, consulte a respectiva documentação:
fonte
Tente este.
Código de amostra
RESULTADO
Primeiro, ele substituirá todos os espaços por espaço único. Do que devemos fazer o corte,
String
porque o Início doString
e o Fim doString
mesmo substituirão todo o espaço por um espaço único, seString
houver espaços no Início doString
e Fim doString
Então, precisamos apará-los. Do que você desejaString
.fonte
Você também pode usar lookarounds.
OU
<space>(?= )
corresponde a um caractere de espaço que é seguido por outro caractere de espaço. Portanto, em espaços consecutivos, ele corresponderia a todos os espaços, exceto o último, porque não é seguido por um caractere de espaço. Isso deixa um espaço único para espaços consecutivos após a operação de remoção.Exemplo:
fonte
aparar()
Remove apenas os espaços iniciais e finais.
No Java Doc, "Retorna uma string cujo valor é essa string, com qualquer espaço em branco à esquerda e à direita removido".
"D ev Dum my"
replace (), replaceAll ()
Substitui todas as cadeias vazias na palavra,
Resultado:
Nota: "\ s +" é a expressão regular semelhante ao caractere de espaço vazio.
Referência: https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html
fonte
Muitas respostas corretas foram fornecidas até agora e vejo muitas votações. No entanto, as formas mencionadas funcionarão, mas não serão realmente otimizadas ou não serão legíveis. Recentemente, deparei com a solução que todos os desenvolvedores vão gostar.
Você terminou. Esta é uma solução legível.
fonte
Em Kotlin, ficaria assim
fonte
reduza os espaços primeiro
colocar em maiúscula a primeira letra e minúsculas em todo o resto
fonte
fonte
Isso funcionou para mim
onde filtro está seguindo a função e varredura é a sequência de entrada:
fonte
você deveria fazer assim
coloque + dentro de colchetes.
fonte
fonte
Veja
String.replaceAll
.Use o regex
"\s"
e substitua por" "
.Então use
String.trim
.fonte
new String(" hello there ").trim().replaceAll("\\s+", " ")
verifique isso ...
Se String contiver apenas espaço único, replace () não substituirá,
Se os espaços forem mais de um, a ação Substituir () executa e remove o espaço.
Contar o número de espaços em uma String.
Pattern .quote ("?") Retorna o padrão literal String.
fonte
Meu método antes de encontrar a segunda resposta usando o regex como uma solução melhor. Talvez alguém precise desse código.
fonte
\s
significa expressões regulares (espaço, tabulação, nova linha, feed de formulário).Versão de fluxo, filtra espaços e tabulações.
fonte
fonte
O método mais simples para remover espaços em branco em qualquer lugar da string.
fonte
A solução acima é o algoritmo com a complexidade de O (n) sem usar nenhuma função java.
fonte
Por favor, use o código abaixo
fonte
Olá desculpe pelo atraso! Aqui está a melhor e mais eficiente resposta que você está procurando:
Portanto, sua saída deste exemplo será: Meu nome é kingkon.
No entanto, este método removerá também o "\ n" que sua string pode ter. Portanto, se você não quiser, basta usar este método simples:
E se você quiser remover também os espaços à esquerda e à direita, adicione:
fonte
Eu sei que o método replaceAll é muito mais fácil, mas eu queria postar isso também.
fonte
fonte