[英]C# split string on a separator then remove an element and then join again by using a separator
我有一个像"SS\fsdf\A123456\"
这样的字符串。
我使用下面的代码来分割字符串,
var record = _recordSection.Split("\");
我得到一个类似字符串数组的"SS"
、 "ffsdf"
和"A123456"
。
我想删除"A123456"
,然后再次格式化字符串
"SS\fsdf\\"
我该怎么办?
如果你想删除元素A123456
,一个.Select()
和一个三元运算符就足够了。
string _recordSection = "SS\u001ffsdf\u001fA123456\u001f";
var record = _recordSection.Split('\u001f');
var merged = string.Join("\u001f", record.Select(x => x != "A123456" ? x : string.Empty));
如果你想删除第三个元素,那就更容易了:
string _recordSection = "SS\u001ffsdf\u001fA123456\u001f";
var record = _recordSection.Split('\u001f');
record[2] = string.Empty;
var merged = string.Join("\u001f", record);
如果你说,你需要删除第三个元素 - 你可以使用 xanato 的解决方案或这个:
int positionToRemove = 3;
string separator = "\u001f";
string _recordSection = "SS\u001ffsdf\u001fA123456\u001f";
var recordList = _recordSection.Split(separator).ToList();
recordList.Remove(recordList[positionToRemove - 1]);
var result = string.Join(separator, recordList);
Console.WriteLine(result); //will output "SS\u001ffsdf\u001f\u001f"
所有不错的解决方案,但在大字符串上使用string.Split
可能效率低下。
如果您需要删除最后一个元素,您可以通过执行以下操作来计算子串大小:
var record = _recordSection.Substring(
0,
_recordSection.LastIndexOf('\u001f', _recordSection.Length - 2)) + "\u001f\u001f";
同样可以从一开始就使用连续的IndexOf
调用来完成。
似乎没有人指出\
是单个转义char
。
试试这个:
private const string InitialString = "SS\u001ffsdf\u001fA123456\u001f";
private const char Separator = '\u001f';
然后只是拆分,替换第三项并重新连接:
var splitStrings = InitialString.Split(Separator);
splitStrings[2] = string.Empty;
var result = string.Join(Separator.ToString(), splitStrings);
完成后, result
如下(从调试器复制):
"SS\u001ffsdf\u001f\u001f"
如果您想要“最后一项”而不是第三项,请使用splitStrings.Length-1
作为索引而不是2
。
不需要比以下更复杂:
using System;
using System.Linq;
namespace HandyExtensions
{
static class StringExtensions
{
static string Splice(this string s, string separator, Func<string, int, bool> desired ) {
string[] segments = s.Split(separator)
.Where( desired )
.ToArray()
;
return String.Join(separator, segments);
}
}
}
那应该让你说这样的话
"a,b,c,d,e,f,g".Splice(",", (s,i) => i % 2 == 0 )
并返回"a,c,e,g"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.