簡體   English   中英

從字符串中獲取數字和字符串

[英]Get a number and string from string

我有一個簡單的問題,但我想以最好的方式解決。 基本上,我有一個這種格式的字符串: <some letters><some numbers> ,即q1qwe12 我想做的就是從中得到兩個字符串(然后我可以將數字部分轉換為整數,也可以不轉換為整數)。 第一個是給定字符串的“字符串部分”,即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}'");

資源:

https://stackoverflow.com/a/15669520/8133067

如果可能的話,請在字母和數字之間添加空格(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM