为 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*
您可以使用正则表达式。例如,这会将 0
和 9
值之间(包括在内)的任何字符替换为 ""
,这实际上只是从字符串中删除数字。
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, "");
干杯
几点:
text.TrimEnd(charsToRemove).TrimStart(charsToRemove)
可以缩短为 text.Trim(charsToRemove)
。
Trim
、TrimStart
和 TrimEnd
接受单个或多个字符(参见 String.Trim)。
- 您的代码
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(',')
...
- 但用
"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());
我必须从我们的 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*
您可以使用正则表达式。例如,这会将 0
和 9
值之间(包括在内)的任何字符替换为 ""
,这实际上只是从字符串中删除数字。
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, "");
干杯
几点:
text.TrimEnd(charsToRemove).TrimStart(charsToRemove)
可以缩短为text.Trim(charsToRemove)
。Trim
、TrimStart
和TrimEnd
接受单个或多个字符(参见 String.Trim)。- 您的代码
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(',')
... - 但用
"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());