簡體   English   中英

檢索字符串值中小數點前的數字值

[英]Retrieving Numeric value before a decimal in a string value

我正在用 C# 編寫一個例程

我有一個字母數字表編號列表,我想檢索小數點之前的數字以在我的例程中使用。

FP10.01-->10
M1.01-->1
PP8.01-->8

如果可能,如何將這樣的東西作為字符串或整數來實現?

您可以使用正則表達式:

Regex r = new Regex("([0-9]+)[.]");

string s = "FP10.01";

var result = Convert.ToInt32(r.Match(s).Groups[1].ToString()); //10

要將結果元素累積到列表中,您可以執行以下操作:

List<string> myList = new List<string>(){ "FP10.01","M1.01", "PP8.01"};
List<int> resultSet = 
     myList.Select(e => 
             Regex.Replace(e.Substring(0, e.IndexOf('.')), @"[^\d]", string.Empty))
           .Select(int.Parse)
           .ToList();

這將獲取myList中的每個元素,然后從索引0. 然后用string.Empty替換所有非數字數據,最后將字符串元素解析為int並將其存儲到列表中。

另一種變體是:

List<int> resultSet =
               myList.Select(e => e.Substring(0, e.IndexOf('.')))
                     .Select(e => string.Join(string.Empty, e.Where(char.IsDigit)))
                     .Select(int.Parse)
                     .ToList();

或者,如果您希望元素為字符串,則可以執行以下操作:

List<string> resultSet =
               myList.Select(e => e.Substring(0, e.IndexOf('.')))
                     .Select(e => string.Join(string.Empty, e.Where(char.IsDigit)))                  
                     .ToList();

要檢索string類型的單個元素,您可以創建一個輔助函數,如下所示:

public static string GetValueBeforeDot(string input){
     return input.Substring(0, input.IndexOf('.'))
                 .Where(char.IsDigit)
                 .Aggregate(string.Empty, (e, a) => e + a);
}

要檢索int類型的單個元素,則輔助函數應為:

public static int GetValueBeforeDot(string input){
       return int.Parse(input.Substring(0, input.IndexOf('.'))
                   .Where(char.IsDigit)
                        .Aggregate(string.Empty, (e, a) => e + a));
}
        string input = "FP10.01";
        string[] _input = input.Split('.');
        string num = find(_input[0]);

        public string find(string input)
        {
            char[] _input = input.ToArray();
            int number;
            string result = null;
            foreach (var item in _input)
            {                
                if (int.TryParse(item.ToString(), out number) == true)
                {
                    result = result + number;
                }
            }

            return result;
        }

這種方法通過用空字符串替換字母字符來刪除字母字符。 在 '.' 上拆分字符將為您留下一個由索引 0 處的數字和索引 1 處的十進制值組成的兩元素數組。

string input = "FP10.01";
var result = Regex.Replace(input, @"([A-Za-z]+)", string.Empty).Split('.');
var beforeDecimalNumbers = result[0]; // 10
var afterDecimalNumbers = result[1];  // 01

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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