如何从字符串中获取第一个数字?
示例:我有“1567438absdg345”
我只想得到“1567438”没有“absdg345”,我希望它是动态的,首先出现Alphabet索引并删除它之后的所有内容。
答案 0 :(得分:32)
您可以使用TakeWhile
扩展名方法从字符串中获取字符,只要它们是数字:
string input = "1567438absdg345";
string digits = new String(input.TakeWhile(Char.IsDigit).ToArray());
答案 1 :(得分:18)
Linq方法:
string input = "1567438absdg345";
string output = new string(input.TakeWhile(char.IsDigit).ToArray());
答案 2 :(得分:7)
或正则表达式方法
String s = "1567438absdg345";
String result = Regex.Match(s, @"^\d+").ToString();
^
匹配字符串的开头,\d+
匹配以下数字
答案 3 :(得分:6)
您可以遍历字符串并通过Char.isDigit
测试当前字符是否为数字。
string str = "1567438absdg345";
string result = "";
for (int i = 0; i < str.Length; i++) // loop over the complete input
{
if (Char.IsDigit(str[i])) //check if the current char is digit
result += str[i];
else
break; //Stop the loop after the first character
}
答案 4 :(得分:4)
忘记正则表达式,在某处创建一个辅助函数...
string input = "1567438absdg345";
string result = "";
foreach(char c in input)
{
if(!Char.IsDigit(c))
{
break;
}
result += c;
}
答案 5 :(得分:1)
另一种方法
private int GetFirstNum(string inp)
{
string final = "0"; //if there's nothing, it'll return 0
foreach (char c in inp) //loop the string
{
try
{
Convert.ToInt32(c.ToString()); //if it can convert
final += c.ToString(); //add to final string
}
catch (FormatException) //if NaN
{
break; //break out of loop
}
}
return Convert.ToInt32(final); //return the int
}
测试:
Response.Write(GetFirstNum("1567438absdg345") + "<br/>");
Response.Write(GetFirstNum("a1567438absdg345") + "<br/>");
结果:
1567438
0
答案 6 :(得分:1)
通过这种方式,您可以从字符串中获取第一个数字。
string stringResult = "";
bool digitFound = false;
foreach (var res in stringToTest)
{
if (digitFound && !Char.IsDigit(res))
break;
if (Char.IsDigit(res))
{
stringResult += res;
digitFound = true;
}
}
int? firstDigitInString = digitFound ? Convert.ToInt32(stringResult) : (int?)null;
应该这样做的另一种选择:
string[] numbers = Regex.Split(input, @"\D+");
我不知道为什么上面的数字列表中出现空字符串?
像下面这样解决,但是似乎正则表达式应该改进以立即进行。
string[] numbers = Regex.Split(firstResult, @"\D+").Where(x => x != "").ToArray();
答案 7 :(得分:0)
一种老式的正则表现主义方式:
public long ParseInt(string str)
{
long val = 0;
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"^([\d]+).*$");
System.Text.RegularExpressions.Match match = reg.Match(str);
if (match != null) long.TryParse(match.Groups[1].Value, out val);
return val;
}
如果无法解析,则该方法返回0.