2013-07-30 65 views
14

Điều tôi tự hỏi là liệu có thể thay thế nhiều ký tự trong một chuỗi hay không (ví dụ: &, | và $ ký tự) mà không cần phải sử dụng. Thay thế() nhiều lần? Hiện tại, tôi đang sử dụng nó như làThay thế nhiều ký tự trong một chuỗi trong C# bằng một lớp lót

return inputData.Replace('$', ' ').Replace('|', ' ').Replace('&', ' '); 

nhưng điều đó thật khủng khiếp và tôi tự hỏi liệu có thay thế nhỏ nhưng hiệu quả tương tự không.

EDIT: Cảm ơn tất cả mọi người cho câu trả lời, tiếc là tôi không có 15 danh tiếng cần thiết để upvote người

+0

xem ht tp: //stackoverflow.com/questions/12007358/alternative-to-string-replace-multiple-times, câu chuyện dài ngắn, trừ khi bạn muốn làm cho mã ít dễ đọc hơn, không, không thực sự. – Dutts

Trả lời

35

Bạn có thể sử dụng Regex.Replace:

string output = Regex.Replace(input, "[$|&]", " "); 
+0

Và ngay cả khi thoát là không cần thiết, +1 –

6

Bạn có thể sử dụng chức năng SplitString.Join tiếp theo:

String.Join(" ", abc.Split('&', '|', '$')) 

mã kiểm tra:

static void Main(string[] args) 
{ 
    String abc = "asdfj$asdfj$sdfjn&sfnjdf|jnsdf|"; 
    Console.WriteLine(String.Join(" ", abc.Split('&', '|', '$'))); 
} 
+0

phải là '... Tham gia (" ", ...' chắc chắn? –

+0

Yeap, lỗi của tôi, thx – FSou1

0

gì về:

return Regex.Replace(inputData, "[\$\|\&]", " "); 
+1

Mã này không biên dịch. Bạn phải thoát kép Regex hoặc là bạn phải thêm tiền tố vào chuỗi của bạn bằng '@'. – fero

1

Có thể làm gì với Regex, nhưng nếu bạn thích đối với một số lý do để tránh nó, sử dụng phần mở rộng tĩnh sau:

public static string ReplaceMultiple(this string target, string samples, char replaceWith) { 
    if (string.IsNullOrEmpty(target) || string.IsNullOrEmpty(samples)) 
     return target; 
    var tar = target.ToCharArray(); 
    for (var i = 0; i < tar.Length; i++) { 
     for (var j = 0; j < samples.Length; j++) { 
      if (tar[i] == samples[j]) { 
       tar[i] = replaceWith; 
       break; 
      } 
     } 
    } 
    return new string(tar); 
} 

Cách sử dụng :

var target = "abc123abc123"; 
var replaced = target.ReplaceMultiple("ab2", 'x'); 
//replaced will result: "xxc1x3xxc1x3" 
Các vấn đề liên quan