C# 扫描字符串中的数字
我有一个包含单词和数字的字符串。 如何找到最后一个数字(位数未知)并将其隔离? 到目前为止,我使用了子字符串方法,但是数字在文本中的位置以及数字的长度都是未知的C# 扫描字符串中的数字,c#,C#,我有一个包含单词和数字的字符串。 如何找到最后一个数字(位数未知)并将其隔离? 到目前为止,我使用了子字符串方法,但是数字在文本中的位置以及数字的长度都是未知的 谢谢 以下是一个简单的解决方案: 或者是一个稍微不同的解决方案,加入一点Linq,以便更好地测量: var number = Regex.Matches(input, @"\d+").Cast<Match>().Last().Value; 您还可以使用更明确的方式: var lastNumberIndex = yourSt
谢谢 以下是一个简单的解决方案: 或者是一个稍微不同的解决方案,加入一点Linq,以便更好地测量:
var number = Regex.Matches(input, @"\d+").Cast<Match>().Last().Value;
您还可以使用更明确的方式:
var lastNumberIndex = yourString
.LastIndexOfAny(new[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'});
这应该做到:
var res = Regex.Matches("kadlkfmg 57 dklfmgladg 89 dfdd", @"\d+");
var lastMatch = res.Cast<Match>().LastOrDefault();
if(lastMatch != null)
{
var nr = lastMatch.Value;
}
var res=Regex.Matches(“kadlkfmg 57 dklfmgladg 89 dfdd”,@“\d+”;
var lastMatch=res.Cast().LastOrDefault();
if(lastMatch!=null)
{
var nr=lastMatch.Value;
}
只需从末尾开始搜索可以找到的第一个整数值。在我看来,这是最有效的方法
最后一位数字:
string s = "randomstringwithnumbers1234567890";
for (int i = s.Length() - 1; i >= 0; i--)
{
if (int.tryParse(s[i], out n) //or use if (char.IsDigit(s[i]))
return s[i];
}
关于最后一个数字:
string s = "randomstringwithnumbers1234567890";
string b = "";
for (int i = s.Length() - 1; i >= 0; i--) //or use if (char.IsDigit(s[i]))
{
if (int.tryParse(s[i], out n)
b =+ s[i];
else if (b.Length() != 0)
return b;
}
这将获得字符串中的最后一位数字(两个示例): 编辑: 要获取最后一个数字(整数),请执行以下操作:
var mychar3 = new string(testing.Reverse()
.SkipWhile(c => !char.IsDigit(c))
.TakeWhile(c => char.IsDigit(c))
.Reverse().ToArray());
您还可以使用高效字符串方法和可读LINQ的组合:
string text = "Foo 1234 Test Bah344 ....";
int index = text.LastIndexOfAny("0123456789".ToCharArray());
if(index >= 0)
{
string until = text.Substring(0, index + 1);
var digits = until.Reverse().TakeWhile(char.IsDigit).Reverse();
string lastNumber = new string(digits.ToArray()); // 344
}
这里有一个一点半的班轮,效率不高:
var lastDigits = text.Reverse()
.SkipWhile(c => !char.IsDigit(c))
.TakeWhile(char.IsDigit).Reverse();
string lastNumber = lastDigits.Any() ? new string(lastDigits.ToArray()) : "";
我建议你也在这里查一下:@user3057504你能澄清一下吗,你想知道字符串中出现的最后一个数字还是最后一个数字吗?谢谢!我需要整数。
0123456789.ToCharArray()
更好吗?:)你必须在每一个字符上循环遍历整个数组,但没有给出整数“我如何才能找到最后一个数字”@FSou1甚至更高的资源成本+1蒂姆,谷歌数字vs数字请。s[i]。GetType()
将返回字符。啊,是的,你是对的。已更改为tryparse()。现在已经晚了:)这并没有充分回答OP的问题。由于应该返回的数字是1234567890
,而不是0
。我正在遍历字符串中的每个字符,因此第一个字符是“0”。@flol,我误解了OP的问题。我改变了我的投票。对不起!!OP说最后一个“号码”谢谢!第三个正是我需要的!
var mychar3 = new string(testing.Reverse()
.SkipWhile(c => !char.IsDigit(c))
.TakeWhile(c => char.IsDigit(c))
.Reverse().ToArray());
string text = "Foo 1234 Test Bah344 ....";
int index = text.LastIndexOfAny("0123456789".ToCharArray());
if(index >= 0)
{
string until = text.Substring(0, index + 1);
var digits = until.Reverse().TakeWhile(char.IsDigit).Reverse();
string lastNumber = new string(digits.ToArray()); // 344
}
var lastDigits = text.Reverse()
.SkipWhile(c => !char.IsDigit(c))
.TakeWhile(char.IsDigit).Reverse();
string lastNumber = lastDigits.Any() ? new string(lastDigits.ToArray()) : "";