我正在尝试从拆分字符串中删除元素/项/条目。
假设我得到了string
[ string _ ],如下所示:
string string_ = "one;two;three;four;five;six";
然后我将这个字符串分开来获取每个项目:
string[] item = (string_.Split(";"));
除了变量之外,我没有任何信息。根据用户的选择,我可以获得值和索引项。
我们假设在这个例子中,用户选择“ 四 ”这是索引“ 3 ”
如何使我的字符串看起来像索引3已被删除,因为string_
将等于以下内容:
“一个;二;三;五;六”
我尝试了多种方法,似乎唯一的解决方案是使用 char 方法。
这是真的还是我错过了什么?
编辑建议已经_posted_answer: 根据用户的选择,我的ITEM可以放在我的分割字符串中的任何位置,这个问题不完全相同。
答案 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());
<强>结果:强>
答案 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(";;", ";");