Có rất nhiều câu trả lời ở đây, và tất cả chúng đều dựa trên hai phương pháp:
- PHƯƠNG PHÁP1: phân tách chuỗi bằng hai chuỗi con và nhồi ký tự giữa chúng
- METHOD2: chuyển đổi chuỗi thành mảng ký tự, thay thế một thành viên mảng và tham gia chuỗi đó
Cá nhân, tôi sẽ sử dụng hai phương pháp này trong các trường hợp khác nhau. Hãy để tôi giải thích.
@FabioPhms: Phương thức của bạn là phương pháp ban đầu tôi đã sử dụng và tôi sợ rằng nó không tốt trên chuỗi có nhiều ký tự. Tuy nhiên, câu hỏi là rất nhiều nhân vật? Tôi đã thử nghiệm nó trên 10 đoạn "lorem ipsum" và mất vài mili giây. Sau đó, tôi đã thử nghiệm nó trên chuỗi lớn hơn 10 lần - thực sự không có sự khác biệt lớn. Hừm.
@vsync, @Cory Mawhorter: Nhận xét của bạn không rõ ràng; tuy nhiên, một lần nữa, một chuỗi lớn là gì? Tôi đồng ý rằng với hiệu suất 32 ... 100kb nên tốt hơn và người ta nên sử dụng biến thể chuỗi con cho một thao tác thay thế ký tự này.
Nhưng điều gì sẽ xảy ra nếu tôi phải thực hiện một vài thay thế?
Tôi cần phải thực hiện các thử nghiệm của riêng mình để chứng minh cái gì nhanh hơn trong trường hợp đó. Giả sử chúng ta có một thuật toán sẽ thao tác một chuỗi tương đối ngắn bao gồm 1000 ký tự. Chúng tôi hy vọng rằng trung bình mỗi ký tự trong chuỗi đó sẽ được thay thế ~ 100 lần. Vì vậy, mã để kiểm tra một cái gì đó như thế này là:
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*
}
Tôi đã tạo ra một câu đố cho điều này, và nó ở đây . Có hai bài kiểm tra, TEST1 (chuỗi con) và TEST2 (chuyển đổi mảng).
Các kết quả:
- KIỂM TRA1: 195ms
- KIỂM TRA2: 6ms
Có vẻ như chuyển đổi mảng đánh bại chuỗi con bằng 2 bậc độ lớn! Vậy - cái quái gì đã xảy ra ở đây ???
Điều thực sự xảy ra là tất cả các hoạt động trong TEST2 được thực hiện trên chính mảng, sử dụng biểu thức gán như thế nào strarr2[p] = n
. Chuyển nhượng thực sự nhanh so với chuỗi con trên một chuỗi lớn và rõ ràng là nó sẽ thắng.
Vì vậy, tất cả là về việc chọn công cụ phù hợp cho công việc. Lần nữa.
str[0] = 'x'
dường như không có bất kỳ lỗi nào, nhưng không có hiệu quả mong muốn!