1

我正在尝试使用“?”拆分字符串 作为分隔符。我的代码从 CSV 文件中读取数据,并且 C# 无法识别某些符号(如分数),因此我试图用相关的数据(在本例中为债券优惠券)替换它们。我在以下代码中有打印语句(嵌入在带有索引变量 i 的循环中)来测试输出:

string[] l = lines[i][1].Split('?');               
//string[] l = Regex.Split(lines[i][1], @"\?");

System.Console.WriteLine("L IS " + l.Length.ToString() + " LONG");
for (int j = 0; j < l.Length; j++)
    System.Console.WriteLine("L["+ j.ToString() + "] IS " + l[j]);

if (l.Length > 1)
{
    double cpn = Convert.ToDouble(lines[i][12]);
    string couponFrac = (cpn - Math.Floor(cpn)).ToString().Remove(0,1);
    lines[i][1] = l[0].Remove(l[0].Length-1) + couponFrac + l[1]; // Recombine, replacing '?' with CPN
}

问题是拆分方法 (string.Split()Regex.Split()) 产生的结果不一致,行中的某些字符串元素正确拆分,而其他字符串元素根本不拆分(因此问号仍在字符串中)。

有什么想法吗?我看过关于拆分方法的类似帖子,但它们并没有太大帮助。

4

2 回答 2

1

我使用 String.Split 没有问题。你能发布你的输入和输出吗?如果你可以使用 String.Replace 来替换你想要的'?使用字符串中未出现的字符,然后在该字符上使用 String.Split 来拆分结果字符串以获得相同的效果。(只是尝试)

于 2013-08-01T20:13:51.390 回答
1

我在解析以下内容时没有任何问题。

var qsv = "now?is?the?time";
var keywords = qsv.Split('?');
keywords.Dump();

代码和输出的屏幕截图...

在此处输入图像描述

更新: 似乎没有任何问题Split。其他地方存在问题,因为在这个小规模测试中它工作得很好。我建议您使用LinqPad小规模地测试这些场景。

var qsv = "TII 0 ? 04/15/15";
var keywords = qsv.Split('?');
keywords.Dump();

qsv = "TII 0 ? 01/15/22";
keywords = qsv.Split('?');
keywords.Dump();

新更新的输出:

在此处输入图像描述

于 2013-08-01T20:10:29.563 回答