为 TrimEnd 和 TrimStart 创建一个字符数组

Creating a char array for TrimEnd and TrimStart

我必须从我们的 Web 服务客户端项目中的字符串中删除前导和尾随数字字符,因为出于某种原因,挪威另一端的 Web 服务不接受 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);    

但是它不会编译...

我遇到的编译错误是:

The best overloaded method match for 'string.String(char*)' has some invalid arguments

Argument 1: cannot convert from 'string' to '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', ' ');

但我更希望有一些可重复使用的东西。

谢谢

根据需要从字符串中删除所有数字。

您可以使用 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());

正则表达式怎么样?

\d*(\w*)\d*

您可以使用正则表达式。例如,这会将 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);

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

Regex rg = new Regex("\d+");
string test = "12345allo12345";
string result = rg.Replace(test, "");

干杯

几点:

  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()表达更好。

最后您的代码可能是:

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());