我只需要读取完整字符串的特定部分。该字符串将采用以下形式:
“1 Some Currency Name = 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();
}
欢迎任何想法或建议,我们将不胜感激!
答案 0 :(得分:12)
问题是,当您将原始字符串拆分为'='
时,您会在结果的开头获得一个额外空格的结果,基本上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();
答案 1 :(得分:1)
您目前的问题可以通过Reed Copsey已经解答过来解决。
new[] {' '}
但是,我正在展示其他一些方法
使用正则表达式
var result = Regex.Match(secondRate, @"\d+(\.\d+)?").Value;
但是假设您的输入字符串是"0.4232 Other Currency Name 0.45"
类型,您需要匹配两个小数值。在这种情况下,您可以继续Regex.Matches
e.g。
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
答案 2 :(得分:0)
以下将返回字符串“0.4232其他货币名称”
string conversionRate = rawSplit[1].ToString();
之前有一个空格,所以在以下时再次拆分:
return inputString.Split();
数组中的0位是该空格,您要么想要位置1,要么在最终分割之前进行修剪。
答案 3 :(得分:0)
字符串的第二部分是= 0.4232
,在=和0.4232之间有一个空格。所以当你拆分时,第一个条目是空字符串。您可以检查第二个条目,但在使用string.Trim()
string.Split()
答案 4 :(得分:0)
如前所述,其他用户的问题是空白区域。一个简单的解决方案是将trim()添加到conversionRate:
rawSplit = GetSplit(conversionRate.Trim());
这样可以保持代码的其余部分不变(即便如此,最好不要使用ToString())。