如何从拆分字符串中删除元素?

时间:2018-02-16 20:08:35

标签: c# string split

我正在尝试从拆分字符串中删除元素/项/条目。

假设我得到了string [ string _ ],如下所示:

string string_ = "one;two;three;four;five;six";

然后我将这个字符串分开来获取每个项目

string[] item = (string_.Split(";"));

除了变量之外,我没有任何信息。根据用户的选择,我可以获得索引项。

我们假设在这个例子中,用户选择“ ”这是索引“ 3

如何使我的字符串看起来像索引3已被删除,因为string_将等于以下内容:

  

“一个;二;三;五;六”

我尝试了多种方法,似乎唯一的解决方案是使用 char 方法。

这是真的还是我错过了什么?

编辑建议已经_posted_answer: 根据用户的选择,我的ITEM可以放在我的分割字符串中的任何位置,这个问题不完全相同。

5 个答案:

答案 0 :(得分:6)

首先,你需要编写更好的变量名,string_是一个可怕的名字。甚至像“输入”之类的东西也更好。

string input = "one;two;three;four;five;six";

接下来,您使用Split()走在正确的轨道上。这将返回string

的数组
string[] splitInput = input.Split(";");

生成的字符串数组如下所示:

//string[0] = one
//string[1] = two
//string[2] = three
//string[3] = four
//string[4] = five
//string[5] = six

使用已知索引

删除

如果要从数组中删除特定元素,可以使用ToList()将Split()的结果改为List<T>,并使用结果的RemoveAt()方法List<T>

List<string> splitList = input.Split(';').ToList();
splitList.RemoveAt(3);

//Re-create the string
string outputString = string.Join(";", splitList);
//output is: "one;two;three;five;six"

删除与输入匹配的所有字符串

如果您需要从列表中删除项目而不知道其索引但知道实际字符串,则可以使用LINQ的Where()过滤掉匹配的项目:

//Get the input from the user somehow
string userInput = Console.ReadLine();
IEnumerable<string> filteredList = input.Split(';')
                                      .Where(x => string.Compare(x, userInput, true) != 0);

//Re-create the string
string outputString = string.Join(";", filteredList);

我做了一个小提琴来演示两种方法here

答案 1 :(得分:0)

您可以通过以下方式将字符串数组转换为列表:

var list = new List<string>(item);

创建列表后,您可以轻松删除元素:

var index = list.IndexOf("four");
list.RemoveAt(index);

加入字符串:

var result = String.Join(";", list.ToArray());

<强>结果:

enter image description here

答案 2 :(得分:0)

您可以将字符串数组转换为List<string>,并且由于您要删除项目的索引,因此可以使用RemoveAt删除项目,然后将项目重新连接成一个字符串

这是一个完整的控制台应用程序示例:

static void Main(string[] args)
{
    string string_ = "one;two;three;four;five;six";
    string[] items = (string_.Split(';'));

    Console.WriteLine("Please select an item to remove:");
    for (int i = 0;i<items.Length;i++)
    {
        Console.WriteLine(string.Format("{0}- {1}", (i + 1).ToString(), items[i]));
    }
    int num = 0;
    int.TryParse(Console.ReadLine(), out num);
    if (num > 0 && num <= items.Length)
    {
        List<string> itemsList = items.ToList();
        itemsList.RemoveAt(num - 1);
        string newString = string.Join(";", itemsList);
        Console.WriteLine(string.Format("The new string is: {0}", newString));
    }
    else
    {
        Console.WriteLine("Invalid number!");
    }
    Console.ReadLine();
}

希望有所帮助。

答案 3 :(得分:0)

我们可以使用LINQ。 初始计划是拆分字符串,然后创建两个枚举的并集:项目之前和之后。像这样:

    // preconditions
    const int idx = 3;
    string string_ = "one;two;three;four;five;six";

    // actual transformation
    string[] item = (string_.Split(';'));
    var iterator = item.Take(idx).Concat(item.Skip(idx + 1));

    // output the results
    var result = string.Join(";", iterator);
    Console.Write(result);

答案 4 :(得分:-2)

这对你有用吗?

如果你创建一个这样的新字符串,那么将string_的值替换为新字符串的值。

string string_ = "one;two;three;four;five;six";
string newstring = string_.Replace("four", "");
string_ = newstring.Replace(";;", ";");