2010-03-18 50 views
9

Tôi nhận được từ một chuỗi lớp khác phải được chuyển thành char. Nó thường chỉ chứa một char và đó không phải là một vấn đề. Nhưng kiểm soát ký tự tôi nhận được như '\\ n' hoặc '\\ t'. Có phương pháp tiêu chuẩn nào để chuyển đổi thành dòng cuối hoặc thẻ tab hoặc tôi cần phải phân tích cú pháp đó không?Chuyển đổi chuỗi thành char

chỉnh sửa: Xin lỗi, trình phân tích cú pháp sẽ ăn một dấu gạch chéo. Tôi nhận được '\\ t'

+0

Lớp bạn nhận được chuỗi đang làm điều gì đó không chuẩn nên ký tự không còn kiểm soát các ký tự, chúng đã được chuyển đổi (không cần thiết) thành chuỗi dài hơn. Bạn sẽ chỉ phải có một trường hợp đặc biệt để xử lý chúng. – rohancragg

+1

có vẻ quen thuộc !: http://www.infoqu.com/dev/c-programming/weeding-out-control-characters-in-c-30095-1/ – rohancragg

+1

Có thể là một câu hỏi ngu ngốc, nhưng bạn đang xem giá trị trong cửa sổ xem? Cửa sổ đồng hồ sẽ bổ sung thêm \ vì vậy bạn có chắc chuỗi là "\\ t" không? – Geoff

Trả lời

3

dòng mới:

string escapedNewline = @"\\n"; 
string cleanupNewLine = escapedNewline.Replace(@"\\n", Environment.NewLine); 

HOẶC

string cleanupNewLine = escapedNewline.Replace(@"\\n", "\n"); 

Tab:

string escapedTab = @"\\t"; 
string cleanupTab= escapedTab.Replace(@"\\t", "\t"); 

Lưu ý việc thiếu chuỗi chữ (tức là tôi đã không sử dụng @ "\ t" vì sẽ không đại diện cho một Tab)

Hoặc bạn có thể xem xét Regular Expressions nếu bạn cần thay thế một loạt các mẫu chuỗi khác nhau.

Bạn có lẽ nên viết một hàm tiện ích để đóng gói các hành vi phổ biến trên cho tất cả các thể Escape Sequences

Sau đó, bạn muốn viết một số Unit Tests để trang trải từng trường hợp, bạn có thể nghĩ đến.

Khi bạn gặp phải bất kỳ lỗi nào, bạn thêm nhiều kiểm tra đơn vị hơn để bao gồm các trường hợp đó.

CẬP NHẬT

Bạn có thể đại diện cho một tab trong XML với một chuỗi ký tự đặc biệt:

	see this article

This article áp dụng cho SQL Server nhưng cũng có thể liên quan đến C# cũng? Để chắc chắn, bạn có thể thử tạo một chuỗi với một tab trong đó và đưa nó vào một số XML (lập trình) và sử dụng XmlSerializer để sắp xếp từng tệp đó để xem đầu ra là gì, sau đó bạn có thể chắc chắn rằng điều này sẽ trung thành 'round-trip' chuỗi với tab vẫn còn trong đó.

+0

Dường như đây chỉ là biến thể có sẵn. –

17

Tôi giả định rằng bạn có nghĩa là lớp gửi cho bạn dữ liệu đang gửi cho bạn một chuỗi như "\ n". Trong trường hợp đó bạn phải phân tích tự thực hiện bằng:

Char.Parse(returnedChar) 

Nếu không, bạn có thể chỉ cần bỏ nó vào một chuỗi như thế này

(string)returnedChar 
+0

Lớp đó đọc nó từ tập tin. Vì vậy, nếu tập tin chứa \ n tôi nhận được \\ n thats rắc rối của tôi. –

5

thế nào về việc sử dụng string.ToCharArray()

Sau đó bạn có thể thêm thích hợp logic để xử lý bất cứ điều gì trong chuỗi.

1

char.parse (chuỗi); được sử dụng để chuyển đổi chuỗi thành char và bạn có thể làm ngược lại char.tostring(); 100% được giải quyết

Các vấn đề liên quan