2013-02-10 37 views
5

Tôi có chuỗi như "1\t2\r\n3\t4" và tôi muốn chia chúng như:Làm thế nào để tách một chuỗi hai lần với các dấu tách khác nhau bằng cách sử dụng LINQ?

new string[][] { { 1, 2 }, { 3, 4 } }

Về cơ bản, nó nên được chia thành dòng, và mỗi dòng nên được chia thành các tab. Tôi đã cố gắng sử dụng sau, nhưng nó không hoạt động:

string toParse = "1\t2\r\n3\t4"; 

string[][] parsed = toParse 
    .Split(new string[] {@"\r\n"}, StringSplitOptions.None) 
    .Select(s => s.Split('\t')) 
    .ToArray(); 
  1. Điều gì là sai với phương pháp của tôi? Tại sao tôi không nhận được kết quả mong muốn?
  2. Bạn sẽ tiếp cận vấn đề này bằng cách sử dụng LINQ như thế nào?

Trả lời

7

Tháo '@':

string toParse = "1\t2\r\n3\t4"; 

string[][] parsed = toParse 
    .Split(new string[] {"\r\n"}, StringSplitOptions.None) 
    .Select(s => s.Split('\t')) 
    .ToArray(); 

Các @ làm cho chuỗi bao gồm các gạch chéo ngược, thay vì các nhân vật mà họ đại diện.

+0

Tôi thành thật không có ý tưởng cho những gì lý do ngu ngốc tôi đã nói thêm rằng '@ 'ở đó và đã không thể nhìn thấy nó. Cảm ơn rất nhiều! : D – hattenn

+0

@hattenn, tôi không có ý là bitchy :) không có hại. – bas

+0

vâng tôi có cùng một vấn đề, tôi sợ đặt nó vào một bình luận bởi vì tôi biết đây không phải là nơi. Nhưng tôi tự hỏi nếu đó là một điều tạm thời bởi vì nó khá hữu ích! – bas

3
string str = "1\t2\r\n3\t4"; 
Int32[][] result = str.Split(new[] { Environment.NewLine }, StringSplitOptions.None) 
    .Select(s => s.Split('\t').Select(s2 => int.Parse(s2)).ToArray()) 
    .ToArray(); 

Demo

+0

Sẽ tốt hơn là thay thế '\ r \ n' trong chuỗi gốc bằng' Environment.Newline'? Nếu chúng ta biết rằng chuỗi có '\ r \ n' thì' Environment.Newline' sẽ không hoạt động nếu mã được chạy trên các nền tảng khác nhau. Tôi nghi ngờ đó là một vấn đề ở đây mặc dù. – TheEvilPenguin

+1

Nếu mã chạy trên một nền tảng khác, có khả năng văn bản đầu vào sẽ chứa dấu tách dòng chính xác. –

+0

Đúng. Tôi cho rằng nó sẽ không có ý nghĩa để bao gồm một chuỗi chữ trong mã và sau đó chia nó, do đó, chuỗi phải đến từ một nơi khác. Tôi nghĩ rằng nó chỉ tickles pedantry của tôi để xem cả nền tảng phụ thuộc và nền tảng độc lập phiên bản trong một đoạn. – TheEvilPenguin

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