2012-05-07 10 views
5

Mam ciąg słów i chcę usunąć liczbę sufiksów i prefiksów (które znajdują się w tablicy) z każdego słowa, a następnie zapisać z powrotem wyrazy w łańcuchu. Czy jest jakaś sugestia na temat? z góry dziękuję.Usuwanie przedrostków i przyrostków ze słów w C#

Łączna liczba przyrostków i prefiksów przekracza 100, a co lepiej je reprezentować? Szyk? Regex? Czy są jakieś sugestie?

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

Może to działać z przyrostkami, a może z przedrostkami? Czy istnieje szybki sposób na wykonanie zarówno przyrostków, jak i prefiksów jednocześnie? Mój ciąg jest za długi.

+3

Co próbowałeś do tej pory? Czy możesz pokazać przykładowe wejście i wyjście, które chcesz? –

+1

czy masz początkowy kod. StackOverflow jest przeznaczony do współpracy z istniejącą pracą, a nie do zalecania. –

Odpowiedz

0
  1. Podziel swój ciąg na tablicę żądań, przy czym każda pozycja to każde słowo. Aby to zrobić, użyj yourString.Split(','). Użyj znak oddzielający swoje słowa w zastępstwie ',', może to być spcae ' '
  2. używanie foreach aby sprawdzić, czy słowa mają żadnej z przedrostków lub sufixes, aby zrobić to użyć yourWord.StartsWith("yourPrefix") i yourWord.EndsWith("yourPrefix")
  3. usuń prefiks/sufiks przy użyciu yourWord.Replace lub yourWord.SubString. Uważaj, aby nie usunąć prefiksu/sufixx, jeśli jest on w środku wyrazu!
+0

Co powiesz na słowa, które zaczynają się lub kończą na końcówkach i prefiksach, ale nie są one przyrostkami lub prefiksami. to tylko część tych słów? jak poradzić sobie z tym problemem? –

+0

@JoneMamni mmhh ... jak odróżnisz słowa, które są przedrostkowane/przyrostkowe od tych, które nie są? masz jakąś zmienną słownikową/valid_word_container? –

+0

Tak, mam słownik. –

0

Jeśli nie możesz sprawdzić ze słownika, jakie słowa są w rzeczywistości słowami, słowa takie jak "premium" będą naprawdę trudne do pomylenia z prefiksem. Teoretycznie możesz stworzyć trochę reguł używanych do sprawdzenia, czy "mium" jest angielskim słowem, ale nigdy nie będzie kompletne i wymagałoby dużo pracy.

9

My StringHelper class ma (między innymi) METODY TrimStart, TrimEnd i StripBrackets, które mogą być przydatne dla Ciebie

//'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

, ale mam wiele sufiksów i prefiksów. czy mogę umieścić je w tablicy lub może użyć regex? jeśli tak, to w jaki sposób może być kod? –

+0

Zaktualizuj swoje pytanie, aby lepiej opisać swoje wymagania. Nie jest dla mnie jasne. –

+0

Możesz przechowywać prefiksy/przyrostki na 2 listach lub tablicach i przetwarzać je w podobny sposób, np. Moje funkcje FindFirstPatternContainedInString w http://geekswithblogs.net/mnf/articles/my-listofstringshelper--class.aspx –