Eu tenho uma string, digamos, Hello world
e preciso substituir o caractere no índice 3. Como posso substituir um caracter especificando um índice?
var str = "hello world";
Eu preciso de algo como
str.replaceAt(0,"h");
javascript
string
replace
character-replacement
Santhosh
fonte
fonte
str[0] = 'x'
não parece gerar nenhum erro, mas ainda não tem o efeito desejado!"use strict"
é ativado:Uncaught TypeError: Cannot assign to read only property '0' of string 'hello world'
(pelo menos em navegadores WebKit)Respostas:
Em JavaScript, as strings são imutáveis , o que significa que o melhor que você pode fazer é criar uma nova string com o conteúdo alterado e designar a variável para apontar para ela.
Você precisará definir a
replaceAt()
função você mesmo:E use-o assim:
fonte
Não há
replaceAt
função no JavaScript. Você pode usar o código a seguir para substituir qualquer caractere em qualquer sequência na posição especificada:fonte
substr
é considerado uma função herdada e deve ser evitada sempre que possível .Você não pode. Pegue os caracteres antes e depois da posição e concorde em uma nova sequência:
fonte
String.prototype.substring
maisString.prototype.substr
.Há muitas respostas aqui, e todas elas são baseadas em dois métodos:
Pessoalmente, eu usaria esses dois métodos em casos diferentes. Deixe-me explicar.
@FabioPhms: Seu método foi o que eu usei inicialmente e eu tinha medo de que ele seja ruim na string com muitos caracteres. No entanto, a pergunta é o que há em muitos personagens? Eu testei em 10 parágrafos "lorem ipsum" e demorou alguns milissegundos. Depois testei-o em cordas 10 vezes maiores - não havia realmente nenhuma grande diferença. Hum.
@vsync, @Cory Mawhorter: Seus comentários são inequívocos; no entanto, novamente, o que é uma string grande? Concordo que, para 32 ... 100kb, o desempenho deve ser melhor e deve-se usar a variante de substring para esta operação de substituição de caracteres.
Mas o que acontecerá se eu tiver que fazer algumas substituições?
Eu precisava realizar meus próprios testes para provar o que é mais rápido nesse caso. Digamos que tenhamos um algoritmo que manipulará uma cadeia relativamente curta que consiste em 1.000 caracteres. Esperamos que, em média, cada caractere dessa sequência seja substituído ~ 100 vezes. Portanto, o código para testar algo como isto é:
Eu criei um violino para isso, e está aqui . Existem dois testes, TEST1 (substring) e TEST2 (conversão de matriz).
Resultados:
Parece que a conversão de array supera a substring em 2 ordens de magnitude! Então - o que diabos aconteceu aqui ???
O que realmente acontece é que todas as operações no TEST2 são feitas no próprio array, usando a expressão de atribuição like
strarr2[p] = n
. A atribuição é realmente rápida em comparação com a substring em uma string grande, e é claro que ela vai ganhar.Portanto, trata-se de escolher a ferramenta certa para o trabalho. Novamente.
fonte
Trabalhar com vetores geralmente é mais eficaz para entrar em contato com String.
Sugiro a seguinte função:
Execute este trecho:
fonte
Array.prototype.replace = function(index, val) { this[index] = val; return this; };
'word'.split('').replace(1, '0').join(''); // returns 'w0rd'
No Javascript, as strings são imutáveis, então você precisa fazer algo como
Para substituir o caractere em x em i por 'h'
fonte
fonte
split
ejoin
Uma linha usando String.replace com retorno de chamada (sem suporte a emoji):
Explicado:
fonte
Mostrar snippet de código
Esse método é bom para seqüências de caracteres pequenas, mas pode ser lento para textos maiores.
fonte
@CemKalyoncu: Obrigado pela ótima resposta!
Também o adaptei um pouco para torná-lo mais parecido com o método Array.splice (e levei em consideração a nota do @Ates):
fonte
Array.splice
funcionalidade de tipo.Isso funciona de maneira semelhante a
Array.splice
:fonte
Você poderia tentar
fonte
Se você deseja substituir caracteres na cadeia, crie cadeias mutáveis. Essas são essencialmente matrizes de caracteres. Você pode criar uma fábrica:
Em seguida, você pode acessar os caracteres e toda a matriz é convertida em string quando usada como string:
fonte
Generalizando a resposta de Afanasii Kurakin, temos:
Vamos expandir e explicar a expressão regular e a função substituta:
A expressão regular
.
corresponde exatamente a um caractere. Og
faz-lo coincidir com todos os personagens em um loop. Areplacer
função é chamada, dado o caractere original e o índice de onde esse caractere está na string. Fazemos umaif
declaração simples para determinar se vamos retornar umorigChar
ou outronewChar
.fonte
Você pode estender o tipo de sequência para incluir o método de inserção:
Então você pode chamar a função:
fonte
Eu fiz uma função que faz algo semelhante ao que você pergunta, verifica se um caractere na string está em uma matriz de caracteres não permitidos, se é que o substitui por ''
fonte
isso é facilmente possível com o RegExp!
fonte
Aqui está uma versão que eu criei se você quiser estilizar palavras ou caracteres individuais no índice em react / javascript.
Exemplo de trabalho: https://codesandbox.io/s/ov7zxp9mjq
E aqui está outro método alternativo
E outro...
fonte
Eu sei que isso é antigo, mas a solução não funciona para o índice negativo, então adiciono um patch a ele. espero que ajude alguém
fonte
Digamos que você deseja substituir o
Kth
índice (índice baseado em 0) por'Z'
. Você poderia usarRegex
para fazer isso.fonte
Você pode usar a seguinte função para substituir
Character
ouString
em uma posição específica de uma String. Para substituir todos os casos de correspondência a seguir, use aString.prototype.replaceAllMatches()
funçãoTeste:
Resultado:
fonte
Aqui está minha solução usando o operador ternário e de mapa. Final mais legível e de fácil manutenção, mais fácil de entender, se você me perguntar.
É mais sobre es6 e melhores práticas.
fonte
Os métodos aqui são complicados. Eu faria assim:
Isto é o mais simples possível.
fonte