C# 如何替换C中字符串的第一个和最后一个字符?

C# 如何替换C中字符串的第一个和最后一个字符?,c#,C#,我有一个简单的问题,我做了一些研究,但没有找到正确的答案 我有这个字符串: |她想吃早餐| 我找到了用另一个字符替换所有字符的答案 我的想法是,我想用{替换第一个|,用}替换最后一个 我知道这很容易,但我想这个问题的答案真的会帮助我 提前感谢。您可以使用: 在线查看它的工作情况: 这假定要替换的字符是字符串中的第一个和最后一个字符。您可以使用: string oldString = "|She wants to eat breakfast|"; string newString = "{" +

我有一个简单的问题,我做了一些研究,但没有找到正确的答案

我有这个字符串:

|她想吃早餐|

我找到了用另一个字符替换所有字符的答案

我的想法是,我想用{替换第一个|,用}替换最后一个

我知道这很容易,但我想这个问题的答案真的会帮助我

提前感谢。

您可以使用:

在线查看它的工作情况:

这假定要替换的字符是字符串中的第一个和最后一个字符。

您可以使用:

string oldString = "|She wants to eat breakfast|";
string newString = "{" + oldString.SubString(1,oldString.Length-2) + "}";
在线查看它的工作情况:

这假定要替换的字符是字符串中的第一个和最后一个字符

string oldString = "|She wants to eat breakfast|";
string newString = "{" + oldString.SubString(1,oldString.Length-2) + "}";
或者使用string.Concat,字符串的+运算符的内部实现调用string.Concat

string newString = string.Concat("{",oldString.SubString(1,oldString.Length-2),"}");
或者使用string.Concat,字符串的+运算符的内部实现调用string.Concat

string newString = string.Concat("{",oldString.SubString(1,oldString.Length-2),"}");

如果您使用.Net 3及更高版本,并且不想使用扩展方法,那么您可以选择Lambda,因为它的性能比普通的字符串操作要好一点

string s = "|she wants to eat breakfast|";
s.Replace(s.ToCharArray().First(ch => ch == '|'), '{'); //this replaces the first '|' char
s.Replace(s.ToCharArray().Last(ch => ch == '|'), '}'); // this replaces the last '|' char

如果您使用.Net 3及更高版本,并且不想使用扩展方法,那么您可以选择Lambda,因为它的性能比普通的字符串操作要好一点

string s = "|she wants to eat breakfast|";
s.Replace(s.ToCharArray().First(ch => ch == '|'), '{'); //this replaces the first '|' char
s.Replace(s.ToCharArray().Last(ch => ch == '|'), '}'); // this replaces the last '|' char
最快的方法是:

var str = "|She wants to eat breakfast|";

unsafe
{
    fixed (char* pt = str)
    {
        pt[0] = '{';
        pt[str.Length - 1] = '}';
    }
}

Console.WriteLine(str); // Prints: {She wants to eat breakfast}
您需要启用不安全代码,右键单击项目>属性>生成>允许不安全代码

这比使用子串和在边缘添加手镯快19倍左右。

最快的方法是:

var str = "|She wants to eat breakfast|";

unsafe
{
    fixed (char* pt = str)
    {
        pt[0] = '{';
        pt[str.Length - 1] = '}';
    }
}

Console.WriteLine(str); // Prints: {She wants to eat breakfast}
您需要启用不安全代码,右键单击项目>属性>生成>允许不安全代码


这比使用子串和在边缘添加手镯快19倍左右。

谢谢你的回答,伙计!工作!但这真的是OP想要的吗:我想用{替换第一个|,用}替换最后一个。@TimSchmelter:我的答案与那句话并不矛盾。这取决于你的假设。我假设字符串以|开头和结尾。我认为这是一个有效的假设,考虑到OPs示例b的组合,问题的标题如何替换C中字符串的第一个和最后一个字符?他说这很有效。但显然只有OP知道必须做出什么样的假设。谢谢你的回答,伙计!工作!但这真的是OP想要的吗:我想用{替换第一个|,用}替换最后一个。@TimSchmelter:我的答案与那句话并不矛盾。这取决于你的假设。我假设字符串以|开头和结尾。我认为这是一个有效的假设,考虑到OPs示例b的组合,问题的标题如何替换C中字符串的第一个和最后一个字符?他说这很有效。但显然只有OP知道必须做出什么样的假设。我只是好奇,使用ToCharArray和String.Join怎么样?它比子字符串快吗?@Sam它可能会以同样的速度结束,如果不是较慢的话。然而,使用不安全的代码肯定是最快的方法。@Sam我测试了它,实际上慢了很多。不安全>子字符串>TCA+Join。@Sam在这种情况下反转字符串对我们有什么好处?这介于不安全和子字符串之间。考虑到它必须是C,我无法想象任何东西会比不安全更快,因为你正在使用一个已经使用过的内存,而且你没有任何重新分配。我只是好奇,使用ToCharray和String怎么样。Join?它比子字符串快吗?@Sam它可能会以同样的速度结束,如果不是较慢的话。然而,使用不安全的代码肯定是最快的方法。@Sam我测试了它,实际上慢了很多。不安全>子字符串>TCA+Join。@Sam在这种情况下反转字符串对我们有什么好处?这介于不安全和子字符串之间。考虑到它必须是C,我无法想象任何东西会比不安全更快,因为您正在使用一个已经使用的内存,并且您没有任何重新分配。