如何在C#中删除字符串的第一个字符和最后一个字符?

30
String: "hello to the very tall person I am about to meet"

我希望它能变成这样:

String: hello to the very tall person I am about to meet

我只能找到截取开头的代码?


1
你想要删除“第一个和最后一个字符”还是想要删除周围的引号?这是两个不同的问题。 - Dour High Arch
在你的例子中,你正在删除引号。这是真正的目的吗? - Rufus L
4个回答

67

使用 String.Substring 方法。

因此,如果您的字符串存储在变量 mystr 中,请按如下方式操作:

mystr = mystr.Substring(1, mystr.Length - 2);

1
这是从开头开始的,而不是从结尾开始! - Beefo
1
我的错误 - 我忘记了C#是基于长度的...我太习惯Java了!第二个参数应该是mystr.Length - 2,而不是mystr.Length - 1。我已经更新了我的答案。 - Anish Goyal

65
如果您想从字符串中删除任何第一个和最后一个字符,则按照Anish的建议使用Substring,但是如果您只想从开头和结尾删除引号,请使用
myStr = myStr.Trim('"');

注意:这将删除所有开头和结尾的引号(文档)。


13
简短警告(因为似乎仍有人查看此问题):如果一个字符串以多个引号开始或结束,这些引号也将被删除,这可能不是预期的(问题标题=第一个和最后一个字符)。例如 ""hello world"" => hello world,而不是 "hello world"。 - Anish Goyal
谢谢,我正好在寻找这个,看起来比我的解决方案更好,而我的解决方案与Anish的相同。 - Juano

11

这仅适用于数组。 - Rans
1
@Rans指数和范围也适用于string - Jan Paolo Go
1
[]应用于字符串变量会像char[]一样打开它以通过索引进行访问,因此范围对于字符串类型是公平的游戏。 - Narish

9

如果你想从字符串中删除特定的字符,比如你的例子中的引号,你可以使用 Trim 来同时去除开头和结尾的字符,或者使用 TrimStartTrimEnd 如果你想要从开头和结尾去除不同的字符。将一个字符(或字符数组)传递给这些方法,以便从字符串开头和结尾去除它们。

var quotedString = "\"hello\"";
var unQuotedString = quotedString.TrimStart('"').TrimEnd('"'); 

// If the characters are the same, then you only need one call to Trim('"'):
unQuotedString = quotedString.Trim('"');

Console.WriteLine(quotedString);
Console.WriteLine(unQuotedString);

输出:

"你好"

你好

或者,您可以使用 SkipTakeConcat 一起使用,从字符串的开头和结尾删除字符。这将即使对于空字符串也有效,节省了任何计算字符串长度的烦恼:

var original = "\"hello\"";
var firstAndLastRemoved = string.Concat(original.Skip(1).Take(original.Length - 2));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接