[英]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.