[英]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.