Văn bản

Text Diff

So sánh hai văn bản theo từng dòng — những gì đã được thêm, xóa hoặc thay đổi, với đánh dấu cấp độ từ trong các dòng đã thay đổi.


                        
                    

Text Diff compares two texts line by line and shows what was added, removed, or changed, with word-level highlighting inside changed lines — much like git diff, but without a command line.

How to use it

Common uses

Things to keep in mind

By default a whitespace-only change (like indentation) still counts as a difference, since it technically changes the line's content.

The diff compares lines by position, so adding or removing a single line near the top can shift how the rest of the text lines up.

Bài viết về công cụ này: Text Diff: thuật toán tìm sự khác biệt giữa hai văn bản như thế nào

Câu hỏi thường gặp

So sánh được tính toán như thế nào?

So sánh diễn ra theo từng dòng: mỗi dòng được xác định là được thêm, xóa hoặc thay đổi, và trong các dòng thay đổi, các từ chính xác khác nhau được đánh dấu.

Việc thêm, xóa và thay đổi được hiển thị như thế nào?

Các dòng được thêm và xóa được đánh dấu như vậy trong kết quả, và các dòng thay đổi hiển thị đánh dấu cấp độ từ để ngay lập tức thấy điều gì đã thay đổi mà không cần đọc lại toàn bộ dòng.

Cả hai văn bản của tôi có được gửi đến máy chủ không?

Không, so sánh chạy hoàn toàn trong trình duyệt bằng JavaScript — không có nội dung nào được gửi đi bất cứ đâu.

Vì sao chèn một dòng lại khiến tất cả các dòng tiếp theo hiển thị là đã thay đổi?

Thuật toán không phải lúc nào cũng nhận ra chính xác đó là một phép chèn chứ không phải thay thế hàng loạt — đặc biệt nếu các dòng xung quanh giống nhau. Các thuật toán diff tốt cố gắng giảm thiểu những báo động giả này bằng cách tìm dãy con chung dài nhất, nhưng không phải lúc nào cũng hoàn hảo.

Khoảng trắng có được tính khi so sánh không?

Có, theo mặc định thay đổi chỉ ở khoảng trắng (ví dụ như thụt lề) cũng được đánh dấu là khác biệt, vì về mặt kỹ thuật đó là một thay đổi nội dung của dòng.

Bài viết: Văn bản

Case Converter: vì sao có các kiểu đặt tên khác nhau

Vì sao trong một dự án, biến được viết camelCase nhưng tệp lại kebab-case, và những quy tắc này đến từ đâu.

Biểu thức chính quy: cú pháp cơ bản và các mẫu thường gặp

Cách đọc một biểu thức chính quy, và khớp tham lam khác khớp lười ra sao.

Sắp xếp và loại bỏ dòng trùng lặp: dùng để làm gì

Vì sao sắp xếp theo số đặt "10" trước "9" là một lỗi, và cách tránh điều đó.

String Escape: vì sao cùng một văn bản cần escape khác nhau

Vì sao cùng một dấu ngoặc kép lại được escape khác nhau trong chuỗi JS, JSON và lệnh shell.

CRLF so với LF: vì sao ký tự cuối dòng vẫn còn quan trọng

Vì sao một tệp được viết trên Windows có thể hiển thị là "toàn bộ đã thay đổi" trong git trên Linux.

Đếm ký tự và từ: vì sao không phải lúc nào cũng đơn giản

Vì sao một emoji hoặc chữ có dấu có thể được tính là nhiều ký tự cùng lúc.

Lorem Ipsum: văn bản giữ chỗ đến từ đâu và dùng để làm gì

Vì sao các nhà thiết kế cố tình dùng văn bản "vô nghĩa" thay vì nội dung thật trong bản phác thảo.

Slugify: cách biến bất kỳ văn bản nào thành URL

Một tiêu đề như "Xin chào, Thế giới! Bạn khỏe không?" biến thành chuỗi tương thích URL như xin-chao-the-gioi-ban-khoe-khong ra sao.

Markdown: vì sao cú pháp văn bản đơn giản đánh bại trình soạn thảo phức tạp

Vì sao lập trình viên chọn viết tài liệu bằng Markdown thay vì trình soạn thảo văn bản định dạng phong phú.

Khoảng trắng và ký tự vô hình: nguyên nhân ẩn giấu của các lỗi kỳ lạ

Vì sao hai chuỗi trông giống hệt nhau có thể không khớp do một ký tự vô hình.

Text Reverse: vì sao "đảo ngược văn bản" khó hơn tưởng tượng

Vì sao đảo ngược chuỗi ngây thơ có thể biến một emoji thành các byte không sử dụng được.

Phân tích tần suất văn bản: vì sao cần đếm số lần từ lặp lại

Tần suất chữ cái trong văn bản mã hóa giúp phá vỡ các mật mã thay thế đơn giản nhất như thế nào.