[英]Get a number and string from string
我有一個簡單的問題,但我想以最好的方式解決。 基本上,我有一個這種格式的字符串: <some letters><some numbers>
,即q1
或qwe12
。 我想做的就是從中得到兩個字符串(然后我可以將數字部分轉換為整數,也可以不轉換為整數)。 第一個是給定字符串的“字符串部分”,即qwe
,第二個是“數字部分”,所以12
。 而且不會出現數字和字母混合的情況,例如qw1e2
。
當然,我知道我可以使用StringBuilder
,然后使用for
循環檢查每個字符是否為數字或字母。 簡單。 但是我認為這不是一個很明確的解決方案,因此我想問您是否有一種方法,一種內置方法或類似方法可以在1-3行中完成? 還是不使用循環?
您可以將正則表達式與命名組一起使用,以標識感興趣的字符串的不同部分。
例如:
string input = "qew123";
var match = Regex.Match(input, "(?<letters>[a-zA-Z]+)(?<numbers>[0-9]+)");
if (match.Success)
{
Console.WriteLine(match.Groups["letters"]);
Console.WriteLine(match.Groups["numbers"]);
}
您可以嘗試使用Linq替代正則表達式 :
string source = "qwe12";
string letters = string.Concat(source.TakeWhile(c => c < '0' || c > '9'));
string digits = string.Concat(source.SkipWhile(c => c < '0' || c > '9'));
您可以使用System.Linq
庫( https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.where )中的Where()
擴展方法來僅過濾數字字符(數字),然后將包含所有數字的IEnumerable
轉換為chars數組,可用於創建新string
:
string source = "qwe12";
string stringPart = new string(source.Where(c => !Char.IsDigit(c)).ToArray());
string numberPart = new string(source.Where(Char.IsDigit).ToArray());
MessageBox.Show($"String part: '{stringPart}', Number part: '{numberPart}'");
資源:
如果可能的話,請在字母和數字之間添加空格(q 3,qet 64等),並使用string.split;否則,請使用for循環,這並不難
您可以作為聚合的一部分進行測試:
var z = "qwe12345";
var b = z.Aggregate(new []{"", ""}, (acc, s) => {
if (Char.IsDigit(s)) {
acc[1] += s;
} else {
acc[0] += s;
}
return acc;
});
Assert.Equal(new [] {"qwe", "12345"}, b);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.