Bỏ qua, tới nội dung chính
ToolViet

So sánh văn bản online, tìm khác biệt 2 đoạn text

So sánh hai đoạn văn bản hoặc đoạn code theo từng dòng, làm nổi bật phần thêm và phần xóa như git diff. Xử lý ngay trên trình duyệt, hỗ trợ bỏ qua khoảng trắng và không phân biệt hoa/thường.

Dữ liệu cập nhật ngày 25/08/2026

So sánh văn bản (diff) hoạt động thế nào

Công cụ tách cả hai đoạn văn bản thành danh sách các dòng, sau đó tìm dãy con chung dài nhất (Longest Common Subsequence - LCS) giữa hai danh sách bằng quy hoạch động. Những dòng nằm trong dãy con chung được đánh dấu giữ nguyên; dòng chỉ có ở văn bản gốc được đánh dấuxóa; dòng chỉ có ở văn bản mới được đánh dấu thêm. Đây chính là thuật toán lõi đứng sau lệnh diff của Unix và tính năng so sánh phiên bản trong Git.

Khi nào nên dùng công cụ so sánh văn bản

Hay dùng nhất khi cần đối chiếu hai phiên bản của cùng một file cấu hình, đoạn code, hợp đồng hay bài viết mà không có sẵn Git hoặc không tiện mở phần mềm quản lý phiên bản - ví dụ so sánh nội dung dán từ hai email, hai bản nháp tài liệu, hoặc response API trước/sau khi hệ thống thay đổi.

Cách đọc kết quả

Dòng nền đỏ có dấu - ở đầu là dòng chỉ xuất hiện trong văn bản gốc (đã bị xóa hoặc thay thế). Dòng nền xanh có dấu + là dòng chỉ xuất hiện trong văn bản mới (mới được thêm vào). Dòng không tô màu là dòng giống hệt nhau ở cả hai bên. Số ở hai cột đầu mỗi dòng là số thứ tự dòng trong văn bản gốc và văn bản mới, giúp định vị nhanh vị trí thay đổi trong file thật.

Giới hạn của so sánh theo dòng

Vì so sánh ở cấp độ DÒNG chứ không phải từng ký tự, một dòng chỉ đổi một chữ cái vẫn hiển thị toàn bộ dòng đó là "xóa + thêm" thay vì chỉ ra đúng ký tự khác biệt. Ngoài ra, một dòng bị di chuyển sang vị trí khác (không giữ nguyên thứ tự) sẽ hiện là "xóa ở chỗ cũ, thêm ở chỗ mới" thay vì được nhận diện là "di chuyển" - đây là hành vi chuẩn của mọi công cụ diff dựa trên LCS, không phải lỗi.

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

Nội dung tôi dán vào có được gửi lên máy chủ nào không?

Không. Toàn bộ việc so sánh chạy ngay trên trình duyệt bằng JavaScript (thuật toán LCS - Longest Common Subsequence, cùng loại thuật toán lõi của lệnh `diff` trên Unix), không có request nào gửi nội dung đi đâu cả. An toàn để dán cả code nội bộ hay tài liệu nhạy cảm.

Công cụ so sánh theo dòng hay theo từng ký tự?

Theo TỪNG DÒNG - giống cách hoạt động của `git diff` và hầu hết công cụ so sánh code. Một dòng chỉ cần khác nhau một ký tự cũng được tính là "dòng khác nhau" (hiển thị dòng cũ bị xóa và dòng mới được thêm), công cụ không so khớp từng ký tự bên trong dòng.

Vì sao một dòng bị đổi vị trí lại hiển thị thành "xóa + thêm" thay vì "di chuyển"?

Thuật toán LCS tìm dãy con chung dài nhất giữ nguyên THỨ TỰ xuất hiện ở cả hai bên - đây là cách mọi công cụ diff dòng lệnh phổ biến (diff, git diff) hoạt động. Một dòng bị chuyển sang vị trí khác (không còn giữ đúng thứ tự tương đối với các dòng xung quanh) sẽ được thể hiện là dòng cũ bị xóa ở vị trí gốc và dòng mới giống hệt được thêm ở vị trí mới, không có khái niệm "di chuyển" riêng.

Tùy chọn "Không phân biệt hoa/thường" và "Bỏ qua khoảng trắng" ảnh hưởng thế nào?

Hai tùy chọn này chỉ ảnh hưởng đến cách SO SÁNH (dùng để quyết định hai dòng có được coi là "giống nhau" hay không), hoàn toàn không thay đổi NỘI DUNG hiển thị - dòng vẫn hiện nguyên văn như bạn đã dán vào. Hữu ích khi so sánh code được người khác định dạng lại (đổi thụt lề, đổi khoảng trắng cuối dòng) nhưng nội dung logic không đổi.

Công cụ so sánh được văn bản dài tối đa bao nhiêu dòng?

Tối đa 2.000 dòng mỗi bên. Thuật toán LCS có độ phức tạp O(n×m) - tăng theo TÍCH số dòng hai bên chứ không phải tổng, nên giới hạn này giữ cho việc so sánh luôn mượt (dưới 1 giây) trên trình duyệt thông thường thay vì có thể làm treo tab với văn bản quá lớn.

Vì sao dán đoạn văn bản giống hệt nhau nhưng vẫn báo "khác nhau"?

Nguyên nhân phổ biến nhất là ký tự xuống dòng ẩn: một bên dùng CRLF (\r\n, kiểu Windows) còn bên kia dùng LF (\n, kiểu Unix/macOS) - công cụ đã tự chuẩn hóa hai kiểu này nên không phải lo, nhưng khoảng trắng thừa cuối dòng hoặc dòng trống thừa ở giữa vẫn được tính là khác biệt thực sự trừ khi bạn bật tùy chọn "Bỏ qua khoảng trắng".

Công cụ liên quan