簡體   English   中英

C# 在分隔符上拆分字符串,然后刪除一個元素,然后使用分隔符再次連接

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM