2012-05-07 62 views
5

Tôi có một chuỗi các từ và tôi muốn xóa một số hậu tố và tiền tố (được đặt trong một mảng) từ mỗi từ, sau đó lưu trữ các từ gốc trong một chuỗi. Có bất kỳ đề xuất nào không? cảm ơn trước.Xóa các tiền tố và hậu tố khỏi các từ trong C#

Tổng số hậu tố và tiền tố lớn hơn 100, những gì tốt hơn để đại diện cho chúng? Mảng? Regex? Có gợi ý nào không?

public static string RemoveFromEnd(this string str, string toRemove) 
{ 
if (str.EndsWith(toRemove)) 
    return str.Substring(0, str.Length - toRemove.Length); 
else 
    return str; 
} 

Điều này có thể hoạt động với hậu tố, tiền tố như thế nào? Có cách nào nhanh chóng để thực hiện cho cả hậu tố và tiền tố cùng một lúc không? Chuỗi của tôi quá dài.

+3

Những gì bạn đã cố gắng cho đến nay? Bạn có thể hiển thị một số ví dụ đầu vào và đầu ra bạn muốn? –

+1

bạn có mã ban đầu không. StackOverflow được thiết kế để cộng tác với công việc hiện tại, không nhằm mục đích đề xuất. –

Trả lời

0
  1. Tách chuỗi của bạn thành một mảng đốt, mỗi mục nhập là mỗi từ. Để thực hiện việc này, bạn sử dụng yourString.Split(','). Sử dụng ký tự tách lời của bạn thay cho ',', nó có thể là một spcae ' '
  2. sử dụng một foreach để kiểm tra xem lời nói của bạn có bất kỳ các tiền tố hoặc sufixes, để làm điều đó bạn sử dụng yourWord.StartsWith("yourPrefix")yourWord.EndsWith("yourPrefix")
  3. remove tiền tố/hậu tố sử dụng yourWord.Replace hoặc yourWord.SubString. Hãy cẩn thận không để loại bỏ tiền tố/sufixx nếu nó ở giữa từ!
+0

cách các từ bắt đầu hoặc kết thúc bằng hậu tố và tiền tố nhưng chúng không phải là hậu tố hoặc tiền tố. họ chỉ là một phần của những từ đó? làm thế nào có thể xử lý vấn đề này. –

+0

@JoneMamni mmhh ... làm cách nào bạn phân biệt các từ được đặt trước/hậu tố từ những từ không phải là? Bạn có một số loại biến từ điển/valid_word_container? –

+0

vâng tôi có một từ điển. –

0

Nếu bạn không thể kiểm tra từ điển, từ nào thực sự là từ thì các từ như "cao cấp" sẽ rất khó để không nhầm lẫn với tiền tố. Về mặt lý thuyết bạn có thể tạo ra một số quy tắc được sử dụng để kiểm tra xem "mium" là một từ tiếng Anh, nhưng nó sẽ không bao giờ được hoàn thành và sẽ đòi hỏi rất nhiều công việc.

9

My StringHelper class có (trong số những người khác) phương pháp TrimStart, TrimEnd và StripBrackets, có thể hữu ích cho bạn

//'Removes the start part of the string, if it is matchs, otherwise leave string unchanged 
    //NOTE:case-sensitive, if want case-incensitive, change ToLower both parameters before call 
    public static string TrimStart(this string str, string sStartValue) 
    { 
     if (str.StartsWith(sStartValue)) 
     { 
      str = str.Remove(0, sStartValue.Length); 
     } 
     return str; 
    } 
    //  'Removes the end part of the string, if it is matchs, otherwise leave string unchanged 
    public static string TrimEnd(this string str, string sEndValue) 
    { 
     if (str.EndsWith(sEndValue)) 
     { 
      str = str.Remove(str.Length - sEndValue.Length, sEndValue.Length); 
     } 
     return str; 
    } 
//  'StripBrackets checks that starts from sStart and ends with sEnd (case sensitive). 
//  'If yes, than removes sStart and sEnd. 
//  'Otherwise returns full string unchanges 
//  'See also MidBetween 
     public static string StripBrackets(this string str, string sStart, string sEnd) 
     { 
      if (StringHelper.CheckBrackets(str, sStart, sEnd)) 
      { 
       str = str.Substring(sStart.Length, (str.Length - sStart.Length) - sEnd.Length); 
      } 
      return str; 
     } 
+0

nhưng tôi có nhiều hậu tố và tiền tố. tôi có thể đặt chúng trong một mảng hoặc sử dụng regex có thể? nếu có thể, làm thế nào mã có thể được? –

+0

Vui lòng cập nhật câu hỏi của bạn để mô tả tốt hơn yêu cầu của bạn là gì. Xin lỗi, điều đó không rõ ràng đối với tôi. –

+0

Bạn có thể giữ tiền tố/hậu tố trong 2 danh sách hoặc mảng và xử lý chúng tương tự như các hàm của tôi FindFirstPatternContainedInString trong http://geekswithblogs.net/mnf/articles/my-listofstringshelper--class.aspx –

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