繁体   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