여기에 많은 답변이 있으며 모두 두 가지 방법을 기반으로합니다.
- 방법 1 : 두 개의 하위 문자열을 사용하여 문자열을 분할하고 그 사이에 문자를 넣습니다.
- METHOD2 : 문자열을 문자형 배열로 변환하고 하나의 배열 구성원을 대체하여 결합
개인적으로, 나는이 두 가지 방법을 다른 경우에 사용할 것입니다. 설명하겠습니다.
@ FabioPhms : 귀하의 방법은 처음에 사용한 방법이며 많은 문자가있는 문자열이 나쁘다는 것을 두려워했습니다. 그러나 질문은 많은 캐릭터가 무엇입니까? 10 개의 "lorem ipsum"단락에서 테스트했으며 몇 밀리 초가 걸렸습니다. 그런 다음 10 배 큰 문자열로 테스트했습니다. 큰 차이는 없었습니다. 흠.
@vsync, @Cory Mawhorter : 귀하의 의견은 모호하지 않습니다. 그러나 다시 큰 문자열은 무엇입니까? 32 ... 100kb의 성능이 향상되고 문자 교체 작업 하나에 하위 문자열 변형을 사용해야한다는 데 동의합니다.
그러나 약간의 교체 작업을 수행하면 어떻게됩니까?
그 경우 더 빠른 것을 증명하기 위해 자체 테스트를 수행해야했습니다. 1000 자로 구성된 비교적 짧은 문자열을 조작하는 알고리즘이 있다고 가정 해 봅시다. 평균적으로 해당 문자열의 각 문자는 ~ 100 배로 바뀔 것으로 예상됩니다. 따라서 다음과 같이 테스트하는 코드는 다음과 같습니다.
var str = "... {A LARGE STRING HERE} ...";
for(var i=0; i<100000; i++)
{
var n = '' + Math.floor(Math.random() * 10);
var p = Math.floor(Math.random() * 1000);
// replace character *n* on position *p*
}
나는 이것을 위해 바이올린을 만들었고 여기 있습니다 . TEST1 (하위 문자열)과 TEST2 (배열 변환)의 두 가지 테스트가 있습니다.
결과 :
- 테스트 1 : 195ms
- 테스트 2 : 6ms
배열 변환이 하위 문자열보다 2 배 더 큰 것 같습니다! 그래서-도대체 여기서 무슨 일이 있었나요 ???
실제로 일어나는 일은 TEST2의 모든 연산이와 같은 할당 표현식을 사용하여 배열 자체에서 수행된다는 것 strarr2[p] = n
입니다. 할당은 큰 문자열의 하위 문자열과 비교할 때 실제로 빠르며 승리 할 것입니다.
따라서 작업에 적합한 도구를 선택하는 것이 중요합니다. 다시.
str[0] = 'x'
은 오류가 발생하지 않지만 원하는 효과가 없다는 것입니다!