为TrimEnd和TrimStart

时间:2015-07-16 16:02:53

标签: c# trim

我必须从我们的网络服务客户端项目中的字符串中删除前导和尾随数字字符,因为某些原因挪威另一端的网络服务不能接受Nicosia 1121作为字符串...

所以我决定构建一个可重复使用的小功能:

public static string CleanNosFromStr(string text, char charsToRemove)
{ 
    var CleanedStr = text.TrimEnd(charsToRemove).TrimStart(charsToRemove);
        return CleanedStr.ToString();
    } 

我想这样称呼它:

char chars2Remove= new string("0,1,2,3,4, 5,6,7,8,9,0, ").Split(",");

wsSoapBody.CardCity = 
myextensions.CleanNosFromStr(aMessage[(int)cardCreate.CardCity].ToString(),chars2Remove);    

但它不会编译......

我得到的编译错误是:

  

最好的重载方法匹配' string.String(char *)'有一些无效的论点

     

参数1:无法转换为' string'到' char *'

我哪里出错了,还有更好的方法吗?

当然我可以使用

wsSoapBody.CardCity = aMessage[(int)cardCreate.CardCity].ToString().TrimEnd
('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', ' ').
TrimStart('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', ' ');

但我更喜欢有一些可以重复使用的东西。

由于

5 个答案:

答案 0 :(得分:4)

有些观点:

  1. text.TrimEnd(charsToRemove).TrimStart(charsToRemove)可以使用text.Trim(charsToRemove)缩短。
  2. TrimTrimStartTrimEnd接受单个或多个字符(请参阅String.Trim)。
  3. 您的代码new string("0,1,2,3,4, 5,6,7,8,9,0, ").Split(",")应为"0,1,2,3,4,5,6,7,8,9, ".Split(',') ...
  4. 但可以用"0123456789 ".ToCharArray()更好地表达。
  5. 最后你的代码可能是:

    private static readonly char[] NosCharsToRemove = "0123456789 ".ToCharArray();
    public static string CleanNosFromStr(string text)
    { 
        return text.Trim(NosCharsToRemove);
    }
    

    wsSoapBody.CardCity = myextensions.CleanNosFromStr(aMessage[(int)cardCreate.CardCity].ToString());
    

答案 1 :(得分:2)

如您所愿,请删除字符串中的所有数字。

您可以使用linq来实现它,只使用Char.IsLetter()过滤所有字母的字符:

public static string CleanNosFromStr(string text)
{ 
    var CleanedStr = new String(text.Where(x=>Char.IsLetter(x)).ToArray());
    return CleanedStr;
} 

并使用它:

wsSoapBody.CardCity = 
myextensions.CleanNosFromStr(aMessage[(int)cardCreate.CardCity].ToString());

答案 2 :(得分:1)

您可以使用正则表达式。例如,这会替换09的值(包括""之间的任何字符,而public static string RemoveNumbersFromStr(string text) { return Regex.Replace(text, "[0-9]", ""); } 基本上只会删除字符串中的数字。

wsSoapBody.CardCity = 
myextensions.RemoveNumbersFromStr(aMessage[(int)cardCreate.CardCity].ToString());

用例:

var message = aMessage[(int)cardCreate.CardCity];
string strMessage = message.ToString();

wsSoapBody.CardCity = myextensions.RemoveNumbersFromStr(strMessage);

或者,如果您希望能够更轻松地调试内容:

position_dodge

答案 3 :(得分:0)

正则表达式怎么样?

\d*(\w*)\d*

答案 4 :(得分:0)

你也可以使用正则表达式:

colSums(data[rowSums(data) == 1, ]) == 1

干杯