2012-05-10 151 views
0

我可以执行类似以下的操作来从单词的末尾删除特定的字符串吗?从单词c的末尾删除特定的字符串#

public static HashSet<string> stringtoremove = new HashSet<string> 
     ............... 
     ................. 
    public static string stepone(this string word) 
     { 
      if (stringtoremove(word.EndsWith)) 
      { 
      word = ..................................; 
      } 
      return word; 
     } 

我试过了,但它不起作用。我错过了我的代码中的东西吗?提前致谢。

+2

*你究竟做了什么? –

+0

您需要更精确地指定您的要求。订购将很重要。例如,如果'stringtoremove'(可怕的名字,btw - 遵循.NET命名约定)包含“ab”和“xy”,那么如果给它“123abxy”,结果应该是什么?那么“123xyab”呢? –

+0

@ mudu,匹配每个单词的末尾,如果它包含其中的一个字符串,则将它们移除。 –

回答

1

我假设你真正要考虑的HashSet<String>,看看是否给定的字符串参数用这些词结束。如果是这样,请将其从字符串末尾删除。

您可以使用FirstOrDefault确定的一组也是给单词的末尾的第一个字符串:

var firstMatch = stringtoremove.FirstOrDefault(str => word.EndsWith(str)); 
if (firstMatch != null) 
    return word.Substring(0, word.Length - firstMatch.Length); 
else 
    return word; 
+0

你假设是真的,但是(stringtoremove)是一串字符串对吗?或者只是一个字符串? –

+0

@JoneMamni:是的,它是['HashSet '](http: //msdn.microsoft.com/en-us/library/bb353005.aspx)。这就是为什么我使用['FirstOrDefault'](http://msdn.microsoft.com/zh-cn/library/bb549039.aspx )来确定该集合中的第一个字符串,该字符串也是给定单词的结尾 –

+0

非常好的一个。谢谢 –

2

最好的选择是使用正则表达式;看看Replace method

string input = "test testabc test123 abc abctest"; 
string pattern = @"(abc\b)"; 
string replacement = ""; 
Regex rgx = new Regex(pattern); 
string result = rgx.Replace(input, replacement); 

Console.WriteLine("Original String: {0}", input); 
Console.WriteLine("Replacement String: {0}", result); 
+0

这一个不会从这个词的结尾删除。它会删除所有符合该模式的内容。但如果使用类似(^(ab | .. | .. .. | ...)的模式,它可能会起作用 –

+0

由于'\ b'字边界它确实删除了两端,所以'testabc'变成'test',但是'abctest'没有被修改 – Strillo

+0

正确的谢谢 –

0

你为什么不使用String.TrimEnd方法?

word = word.TrimEnd(charsToTrim) 
+0

(charsToTrim)必须数组,列表,哈希集的字符串。 –