Строка кавычек в C # - PullRequest
       1

Строка кавычек в C #

24 голосов
/ 02 марта 2011

Пожалуйста, прости мою лень.Я мог бы понять это, прочитав, я знаю, но я подумал, что дам одному из вас, гению C #, шанс выиграть несколько повторений.

У меня есть файл данных в INI-файле, подобный формату, который долженбыть прочитанным как кодом C, так и кодом C #.Код C ожидает, что строковые значения будут заключены в кавычки.Эквивалентный код C # использует некоторый базовый класс или что-то, над чем у меня нет контроля, но в основном он включает кавычки как часть выходной строки.Т.е. содержимое файла данных

MY_VAL="Hello World!"

дает мне

"Hello World!"

в моей строке C #, когда мне действительно нужно, чтобы оно содержало

Hello World!

Как мне условно(при наличии первого и последнего символа, являющегося ") удалите кавычки и получите содержимое строки, которое я хочу.

Ответы [ 9 ]

58 голосов
/ 02 марта 2011

В вашей строке используйте Trim с "as char:

.Trim('"')
8 голосов
/ 02 марта 2011

Я обычно звоню String.Trim () для этой цели:

string source = "\"Hello World!\"";
string unquoted = source.Trim('"');
4 голосов
/ 16 мая 2012

Моя реализация проверяет, что кавычки с обеих сторон

public string UnquoteString(string str)
{
    if (String.IsNullOrEmpty(str))
        return str;

    int length = str.Length;
    if (length > 1 && str[0] == '\"' && str[length - 1] == '\"')
        str = str.Substring(1, length - 2);

    return str;
}
1 голос
/ 31 августа 2016

Будучи навязчивым, здесь (это я; без комментариев о вас), вы можете рассмотреть

  .Trim(' ').Trim('"').Trim(' ')

, так что любые ограничивающие пробелы за пределами строки в кавычках обрезаются, тогда кавычкиудаляются и, наконец, все ограничивающие пробелы для содержащейся строки удаляются.

  • Если вы хотите сохранить ограниченные пробелы, пропустите последний .Trim ('').
  • При наличии пробелов и / или кавычек они будут сохранены.Скорее всего, такие являются желательными и не должны быть удалены.
  • Сделайте некоторое исследование о том, что Trim () не делает с такими вещами, как символы формы и / или табуляции, ограничения и встраивания.Возможно, что один и / или другой трим ('') должен быть просто трим ().
1 голос
/ 11 сентября 2015

Я бы предложил использовать метод replace ().

string str = "\"HelloWorld\"";
string result = str.replace("\"", string.Empty);
1 голос
/ 02 марта 2011

Просто возьмите возвращенную строку и сделайте Trim('"');

0 голосов
/ 05 сентября 2018

То, что вы пытаетесь сделать, часто называют «зачисткой» или «расстановкой цитат». Обычно, когда значение равно в кавычках , это означает не только то, что оно окружено символами кавычек (например, в данном случае "), но также то, что оно может содержать или не содержать специальные символы для включения кавычка сама внутри цитируемого текста.

Короче, вы должны рассмотреть что-то вроде:

string s = @"""Hey ""Mikey""!";
s = s.Trim('"').Replace(@"""""", @"""");

Или при использовании знака апострофа:

string s = @"'Hey ''Mikey''!";
s = s.Trim('\'').Replace("''", @"'");

Кроме того, иногда значения, которые вообще не нуждаются в кавычках (то есть не содержат пробелов), в любом случае могут не нуждаться в кавычках. Вот почему проверка символов кавычек перед усечением является разумной.

Рассмотрите возможность создания вспомогательной функции, которая будет выполнять эту работу предпочтительным образом, как в примере ниже.

    public static string StripQuotes(string text, char quote, string unescape)a
    {
        string with = quote.ToString();
        if (quote != '\0')
        {
            // check if text contains quote character at all
            if (text.Length >= 2 && text.StartsWith(with) && text.EndsWith(with))
            {
                text = text.Trim(quote);
            }
        }
        if (!string.IsNullOrEmpty(unescape))
        {
            text = text.Replace(unescape, with);
        }
        return text;
    }
using System;

public class Program
{
    public static void Main()
    {
        string text = @"""Hello World!""";
        Console.WriteLine(text);

        // That will do the job
        // Output: Hello World!
        string strippedText = text.Trim('"');
        Console.WriteLine(strippedText);

        string escapedText = @"""My name is \""Bond\"".""";
        Console.WriteLine(escapedText);

        // That will *NOT* do the job to good
        // Output: My name is \"Bond\".
        string strippedEscapedText = escapedText.Trim('"');
        Console.WriteLine(strippedEscapedText);

        // Allow to use \" inside quoted text
        // Output: My name is "Bond".
        string strippedEscapedText2 = escapedText.Trim('"').Replace(@"\""", @"""");
        Console.WriteLine(strippedEscapedText2);

        // Create a function that will check texts for having or not
        // having citation marks and unescapes text if needed.
        string t1 = @"""My name is \""Bond\"".""";
        // Output: "My name is \"Bond\"."
        Console.WriteLine(t1);
        // Output: My name is "Bond".
        Console.WriteLine(StripQuotes(t1, '"', @"\"""));
        string t2 = @"""My name is """"Bond"""".""";
        // Output: "My name is ""Bond""."
        Console.WriteLine(t2);
        // Output: My name is "Bond".
        Console.WriteLine(StripQuotes(t2, '"', @""""""));
    }
}

https://dotnetfiddle.net/TMLWHO

0 голосов
/ 02 марта 2011

Использовать функцию замены строки или функцию обрезки.Если вы просто хотите удалить первые и последние кавычки, используйте функцию подстроки.

string myworld = "\"Hello World!\"";
string start = myworld.Substring(1, (myworld.Length - 2));
0 голосов
/ 02 марта 2011

Если вы знаете, что всегда будет «в конце и в начале», это будет самый быстрый путь.

s = s.Substring(1, s.Length - 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...