Eu posso usar isso:
String str = "TextX Xto modifyX";
str = str.replace('X','');//that does not work because there is no such character ''
Existe uma maneira de remover todas as ocorrências de caracteres X
de uma String em Java?
Eu tentei isso e não é o que eu quero: str.replace('X',' '); //replace with space
Respostas:
Tente usar a sobrecarga que recebe
CharSequence
argumentos (por exemplo,String
) em vez dechar
:fonte
CharSequence
. docs.oracle.com/javase/7/docs/api/java/lang/…X
ser do tipo char?toString
primeiro. Portanto, seu código seria algo parecido comstr = str.replace(yourChar.toString(), "");
str = str.replace("\uffff", "");
Usando
vai funcionar.
Uso seria
str.replace("X", "");
.Executando
retorna:
fonte
replace
sobrecarga que exige um simplesCharSequence
.Se você quiser fazer algo com o Java Strings, o Commons Lang StringUtils é um ótimo lugar para procurar.
fonte
replace
.Este é o exemplo de onde eu removi o caractere - da String.
fonte
Eu gosto de usar o RegEx nesta ocasião:
onde g significa global para que ele passe por toda a sua string e substitua todo X por ''; se você quiser substituir o X e o x, basta dizer:
(veja meu violino aqui: violino )
fonte
Olá Experimente este código abaixo
fonte
Use replaceAll em vez de replace
Isso deve lhe dar a resposta desejada.
fonte
return Pattern.compile(target.toString(), Pattern.LITERAL).matcher( this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
fonte
input = "deletes all blanks too";
dá "deletesalllankstoo"aqui está uma função lambda que remove todos os caracteres passados como string
String str = "TextX XYto modifyZ";
deleteChars.apply( str, "XYZ" ); // –> "Text to modify"
Essa solução leva em consideração que a String resultante - diferentemente de
replace()
- nunca se torna maior que a String inicial ao remover caracteres. Portanto, evita a alocação e a cópia repetidas enquanto acrescenta caracteres no modoStringBuilder
comoreplace()
faz.Sem mencionar a geração inútil
Pattern
e asMatcher
instâncias emreplace()
que nunca são necessárias para remoção.Diferentemente
replace()
desta solução, você pode excluir vários caracteres de uma só vez.fonte
str.replace("…", "")
instanciaprivate Pattern(…)
e depois nas chamadas padrão geradaspublic String replaceAll(String repl)
. Então, as seguintes chamadas de função aconteceram:return Pattern.compile(target.toString(), Pattern.LITERAL).matcher( this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
- veja o comentário Sal_Vader_808. Ao todo, ca três vezes mais que minha solução lambda de quadril . E aqui está bem explicado por que minha solução hip lambda também é mais rápida: Por que o String :: replace () do Java é tão lento?Avaliação das principais respostas com uma referência de desempenho que confirma preocupações de que a resposta escolhida atual faça operações regex dispendiosas sob o capô
Até o momento, as respostas fornecidas estão em três estilos principais (ignorando a resposta JavaScript;)):
Em termos de tamanho do código, claramente o String.replace é o mais conciso. A implementação Java simples é um pouco menor e mais limpa (IMHO) do que o Lambda (não me interpretem mal - eu uso o Lambdas sempre que apropriado)
A velocidade de execução foi, na ordem do mais rápido para o mais lento: implementação simples de Java, Lambda e String.replace () (que chama regex).
De longe, a implementação mais rápida foi a simples implementação Java ajustada para pré-alocar o buffer StringBuilder ao tamanho máximo possível do resultado e, em seguida, simplesmente anexa caracteres ao buffer que não está na string "chars to delete". Isso evita qualquer realocação que ocorreria para Strings> 16 caracteres de comprimento (a alocação padrão para StringBuilder) e evita o impacto de desempenho "deslizar para a esquerda" ao excluir caracteres de uma cópia da string que ocorre é a implementação do Lambda.
O código abaixo executa um teste de benchmark simples, executando cada implementação 1.000.000 de vezes e registra o tempo decorrido.
Os resultados exatos variam a cada execução, mas a ordem do desempenho nunca muda:
A implementação do Lambda (como copiada da resposta da Kaplan) pode ser mais lenta porque executa um "deslocamento deixado por um" de todos os caracteres à direita do caractere sendo excluído. Obviamente, isso pioraria para cadeias mais longas, com muitos caracteres exigindo exclusão. Também pode haver alguma sobrecarga na própria implementação do Lambda.
A implementação String.replace, usa regex e faz uma regex "compilar" a cada chamada. Uma otimização disso seria usar o regex diretamente e armazenar em cache o padrão compilado para evitar o custo de compilá-lo a cada vez.
fonte
fromString.replace("X", "").replace("Y", "").replace("Z", "");
seria necessário. Agora, temos o tempo correto: Comece com um tempo simples: 759 | Iniciar lambda Hora: 1092 | Iniciar deleteCharsLambda () Hora: 1420 | Iniciar a substituição corrigida Hora: 4636Você precisará colocar os caracteres que precisam ser removidos dentro dos colchetes durante o tempo de substituição. O código de exemplo será o seguinte:
fonte
Você pode usar
str = str.replace("X", "");
como mencionado anteriormente e ficará bem. Para sua informação,''
não é um caractere vazio (ou válido), mas'\0'
é.Então você pode usar
str = str.replace('X', '\0');
.fonte