用一个单词多次分割一个字符串?

时间:2018-07-19 21:39:06

标签: c# vb.net

我正在从Visual Basic切换到c#。在我的项目中,我将它拆分了几次,其中一个单词是一个单词。这是我的VB代码:

    Dim Item As String() = New String() {TXTItem1.Text + "-"}
        If Foods.Contains(TXTItem1.Text) Then
            Dim Substring As String = Foods.Split(Item, StringSplitOptions.None)(1)
            Dim SPValue As String = Substring.Split(vbNewLine)(0)
            MsgBox(SPValue)

现在这是我的C#代码:

     string[] Item = new string[] {TXTSearchItem.Text + "-"};
        if (Foods.Contains(TXTSearchItem.Text))
        {
            string Substring = Foods.Split(Item, StringSplitOptions.None)[1];

            MessageBox.Show(Substring);

由于某种原因,我无法再次拆分,MessageBox甚至没有显示。有什么帮助吗?谢谢!

2 个答案:

答案 0 :(得分:0)

什么是食品对象?那是数组还是字符串?

如果我没记错的话,我相信对字符串的Split扩展方法会创建String类型的Array而不是String。

由于Substring被声明为String而不是Array,因此MessageBox.Show方法可能仅将String数组显示为对象,或者无法正确编译。

*编辑。

这是您要寻找的吗?这只会显示在MessageBox.Show方法中的项目字符串数组之后出现的信息。

    string[] Item = new string[] { TXTSearchItem.Text + "-" };
    if (Foods.ToLower().Contains(TXTSearchItem.Text.ToLower()))
    {
        string Substring = Foods.Split(Item, StringSplitOptions.None)[1];

        MessageBox.Show(Substring);
    } 

答案 1 :(得分:0)

而不是使用string.Split,如何搜索只是在寻找什么?可能更简单:

const string foods = "Banana-21\r\nEggs-123\r\n";
const string item = "banana";
var startIndex = foods.IndexOf(item + "-", StringComparison.CurrentCultureIgnoreCase);
var dashIndex = foods.IndexOf("-", startIndex);
var endIndex = foods.IndexOf("\r\n", startIndex);
var foodName = foods.Substring(startIndex, dashIndex - startIndex);
var footCount = foods.Substring(dashIndex + 1, endIndex - dashIndex - 1);
MessageBox.Show($"[{foodName}]:  {footCount}");

但是,如果您真的想使用string.Split,这是一个示例(做类似的事情):

const string foods = "Banana-21\r\nEggs-123\r\nCandy-1\r\n";
var foodItems = new Dictionary<string, int>();
var records = foods.Split(new[]{ "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (var foodRecord in records)
{
    var parts = foodRecord.Split(new[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
    if (!int.TryParse(parts[1], out var foodCount))
    {
        foodCount = 0;
    }
    foodItems.Add(parts[0], foodCount);
}

该代码运行后,您最终得到包含以下内容的foodItems:

[0]    {[Banana, 21]}
[1]    {[Eggs, 123]}
[2]    {[Candy, 1]}

就其价值而言,(至少对我而言)首先在行末端进行分割,然后再对每一行(或仅对您感兴趣的行)进行分割,这是更有意义的。