簡體   English   中英

String.Split()返回空值

[英]String.Split() returns empty value

我只需要讀取完整字符串的特定部分。 該字符串將采用以下形式:

“1部分貨幣名稱= 0.4232其他貨幣名稱”

因此,我能想到的最快的方法是將字符串拆分為等於(=)運算符,從而向數組添加兩個值,如下所示:

string rawInput = "1 Some Currency Name = 0.4232 Other Currency Name";
string[] rawSplit = rawInput.Split('=');
string firstRate = rawSplit[0].ToString();
string secondRate = rawSplit[1].ToString();

我現在只需要獲取secondRate字符串的第一部分(“0.4232”)。 所以我會再次拆分該字符串(編碼錯誤):

string[] lastSplit = secondRate.Split(); //Split at whitespace characters
string firstValue = lastSplit[0].ToString(); //Should return "0.4232" but instead returns ""

當我運行應用程序來測試此函數時,它返回一個空字符串而不是值“0.4232”。 為什么會這樣? 我在這里錯過了什么?

完整方法:

private void btnTest_Click(object sender, EventArgs e)
{
    string rawInput = "1 Some Currency Name = 0.4232 Other Currency Name";
    string[] rawSplit = rawInput.Split('=');
    string baseRate = rawSplit[0].ToString(); //1 Some Currency Name
    string conversionRate = rawSplit[1].ToString(); //0.4232 Other Currency Name

    rawSplit = GetSplit(conversionRate);
    XtraMessageBox.Show(rawSplit[0].ToString()); //Returns blank string here???
}

private string[] GetSplit(string inputString)
{
    return inputString.Split();
}

歡迎任何想法或建議,將不勝感激!

問題是,當你將原始字符串拆分為'=' ,你得到的結果是在結果的開頭有一個額外的空格,基本上rawSplit[1]等於" 0.4232 Other Currency Name"

您可以使用String.Split的重載,它允許您指定刪除空條目,這將刪除結果中的任何空白條目。

string[] lastSplit = secondRate.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);

另外,當輸入已經是字符串時,不需要使用ToString()

string[] rawSplit = rawInput.Split('=');
// rawSplit is a string array, so rawSplit[0] is already a string...
string firstRate = rawSplit[0]; // .ToString();

您當前的問題可以通過Reed Copsey已經解答過來解決

new[] {' '}

但是,我正在展示其他一些方法

通過使用正則表達式

var result = Regex.Match(secondRate, @"\d+(\.\d+)?").Value;

但假設您的輸入字符串類型為"0.4232 Other Currency Name 0.45" ,您需要匹配兩個小數值。 在這種情況下,您可以繼續使用Regex.Matches

例如

string secondRate ="0.4232 Other Currency Name 0.45";
var result = Regex.Match(secondRate, @"\d+(\.\d+)?").Value;

            MatchCollection matches = Regex.Matches(secondRate, @"\d+(\.\d+)?");
            foreach (Match match in matches)
            {
               foreach (Capture capture in match.Captures)
               {
                   Console.WriteLine("Value={1}", capture.Index, capture.Value);
               }
           }

通過使用Where擴展方法

完整的代碼

string rawInput = "1 Some Currency Name = 0.4232 Other Currency Name 0.45";
            string[] rawSplit = rawInput.Split('=');
            string firstRate = rawSplit[0].ToString();
            string secondRate = rawSplit[1].ToString();
            string[] lastSplit = secondRate.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

            decimal num = 0;
            lastSplit
                .Where(d => decimal.TryParse(d, out num))
                .ToList()
                .ForEach(i => Console.WriteLine(i));

產量

0.4232
0.45

下面將返回字符串“0.4232其他貨幣名稱”

string conversionRate = rawSplit[1].ToString();

這之前有一個空間,所以當再次拆分時:

return inputString.Split();

數組中的0位是該空格,您要么想要位置1,要么在最終分割之前進行修剪。

字符串的第二部分是= 0.4232 ,在=和0.4232之間有一個空格。 所以當你拆分時,第一個條目是空字符串。 您可以檢查第二項,但更好的方法是string.Trim()使用前string.Split()

如前所述,其他用戶的問題是空白區域。 一個簡單的解決方案是將trim()添加到conversionRate:

rawSplit = GetSplit(conversionRate.Trim());

這將允許保持代碼的其余部分完整(即便如此,建議不必要地使用ToString())。

暫無
暫無

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

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