内置方法中字符串的自动引号

本文关键字:方法 字符串 内置 | 更新日期: 2023-09-27 17:52:17

是否有一些内置的方法在c#中为字符串添加引号?

内置方法中字符串的自动引号

你的意思是只是加引号吗?像这样的吗?

text = "'"" + text + "'"";

?我不知道有什么内置的方法可以做到这一点,但是如果你想的话,写一个是很容易的:

public static string SurroundWithDoubleQuotes(this string text)
{
    return SurroundWith(text, "'"");
}
public static string SurroundWith(this string text, string ends)
{
    return ends + text + ends;
}

这样就更通用了:

text = text.SurroundWithDoubleQuotes();

text = text.SurroundWith("'"); // For single quotes

我不能说我需要经常这样做,但值得有一个方法…

string quotedString = string.Format("'"{0}'"", originalString);

是的,使用连接和转义字符

myString = "'"" + myString + "'"";

可能是一个扩展方法

public static string Quoted(this string str)
{
    return "'"" + str + "'"";
}

用法:

var s = "Hello World"
Console.WriteLine(s.Quoted())

不可以,但是你可以自己编写或创建一个扩展方法

string AddQuotes(string str)
{
    return string.Format("'"{0}'"", str);
}

使用转义字符

只需在特殊字符前加上反斜杠,即escape character

简单示例

string MyString = "Hello";
Response.Write(MyString);

这将打印:

Hello

但:

string MyString = "The man said '"Hello'"";
Response.Write(MyString);

打印:

The man said "Hello"

您可以使用有用的@操作符来帮助转义字符串,参见此链接:

http://www.kowitz.net/archive/2007/03/06/the-c-string-literal

然后,对于引号,您将使用双引号来表示单引号。例如:

string MyString = @"The man said ""Hello"" and went on his way";
Response.Write(MyString);

输出:

The man said "Hello" and went on his way

我自己是一个c#新手,所以我有,但我有一个包罗万象的实用程序类,因为我想念Perl:

// overloaded quote - if no quote chars spec'd, use ""
public static string quote(string s) {
    return quote(s, "'"'"");
}
// quote a string
// q = two quote chars, like "", '', [], (), {} ...
//     or another quoted string (quote-me-like-that)
public static string quote(string s, string q) {
    if(q.Length == 0)        // no quote chars, use ""
        q = "'"'"";
    else if(q.Length == 1)    // one quote char, double it - your mileage may vary
        q = q + q;
    else if(q.Length > 2)    // longer string == quote-me-like-that
        q = q.Substring(0, 1) + q.Substring(q.Length - 1, 1);
    if(s.Length == 0)    // nothing to quote, return empty quotes
        return q;
    return q[0] + s + q[1];
}

像这样使用:

quote("this with default");
quote("not recommended to use one char", "/");
quote("in square brackets", "[]");
quote("quote me like that", "{like this?}");

的回报:

"this with default"
/not recommended to use one char/
[in square brackets]
{quote me like that}

在我的例子中,我想只在字符串没有被引号包围的情况下添加引号,所以我这样做了:

(这与我实际所做的略有不同,因此未经过测试)

public static string SurroundWith(this string text, string ends)
{
    if (!(text.StartsWith(ends) && text.EndsWith(ends)))
    {
        return string.Format("{1}{0}{1}", text, ends);
    }
    else
    {
        return text;
    } 
}

现代C#版本如下。使用string.Create()可以避免不必要的分配:

public static class StringExtensions
{
    public static string Quote(this string s) => Surround(s, '"');
    public static string Surround(this string s, char c)
    {
        return string.Create(s.Length + 2, s, (chars, state) =>
        {
            chars[0] = c;
            state.CopyTo(chars.Slice(1));
            chars[^1] = c;
        });
    }
}

没有这样的内置方法来满足您的需求

有SplitQuotes方法做一些事情输入-这是一个"非常长"的输入。字符串输出—这是一个非常长的字符串

当你从文本框或其他控件中获得字符串时,它会带有引号。

如果你仍然想加引号,那么你可以使用这种方法

private string PlaceQuotes(string str, int startPosition, int lastPosition)
{
    string quotedString = string.Empty;
    string replacedString = str.Replace(str.Substring(0, startPosition),str.Substring(0, startPosition).Insert(startPosition, "'")).Substring(0, lastPosition).Insert(lastPosition, "'");
    return String.Concat(replacedString, str.Remove(0, replacedString.Length));
}