Удалить текст между кавычками
У меня есть программа, в которой вы можете ввести строку. Но я хочу, чтобы текст между кавычками "" был удален.
пример:
in: сегодня очень "хороший" и жаркий день.
out: сегодня очень "" и жаркий день.
Console.WriteLine("Enter text: ");
text = Console.ReadLine();
int letter;
string s = null;
string s2 = null;
for (s = 0; s < text.Length; letter++)
{
if (text[letter] != '"')
{
s = s + text[letter];
}
else if (text[letter] == '"')
{
s2 = s2 + letter;
letter++;
(text[letter] != '"')
{
s2 = s2 + letter;
letter++;
}
}
}
Я не знаю, как написать строку без текста между кавычками на консоль. Мне не разрешено использовать сложный метод, такой как regex.
7 ответов
это должно сделать трюк. Он проверяет каждый символ в строке в кавычки.
Если он находит кавычки, то устанавливает quotesOpened
флаг true
, поэтому он будет игнорировать любой последующий символ.
когда он встречает другие кавычки, он устанавливает флаг в false
, поэтому он возобновит копирование символов.
Console.WriteLine("Enter text: ");
text = Console.ReadLine();
int letterIndex;
string s2 = "";
bool quotesOpened = false;
for (letterIndex= 0; letterIndex< text.Length; letterIndex++)
{
if (text[letterIndex] == '"')
{
quotesOpened = !quotesOpened;
s2 = s2 + text[letterIndex];
}
else
{
if (!quotesOpened)
s2 = s2 + text[letterIndex];
}
}
надеюсь, что это помогает!
взять без регулярных выражений, которые мне больше нравятся, но хорошо:
string input = "abc\"def\"ghi";
string output = input;
int firstQuoteIndex = input.IndexOf("\"");
if (firstQuoteIndex >= 0)
{
int secondQuoteIndex = input.IndexOf("\"", firstQuoteIndex + 1);
if (secondQuoteIndex >= 0)
{
output = input.Substring(0, firstQuoteIndex + 1) + input.Substring(secondQuoteIndex);
}
}
Console.WriteLine(output);
принцип действия:
- он ищет первое вхождение
"
- затем он ищет второе вхождение
"
- затем он принимает первую часть, в том числе первый
"
и вторая часть, включая вторую"
вы можете улучшить это самостоятельно, выполнив поиск до конца строки и замените все вхождения. Вы должны помнить новый "первый индекс", который вы должны искать.
Сначала нам нужно разделить строку, а затем удалить нечетные элементы:
private static String Remove(String s)
{
var rs = s.Split(new[] { '"' }).ToList();
return String.Join("\"\"", rs.Where(_ => rs.IndexOf(_) % 2 == 0));
}
static void Main(string[] args)
{
var test = Remove("hello\"world\"\"yeah\" test \"fhfh\"");
return;
}
string text = @" Today is a very ""nice"" and hot day. Second sentense with ""text"" test";
Regex r = new Regex("\"([^\"]*)\"");
var a = r.Replace(text,string.Empty);
пожалуйста, попробуйте это.
это было бы возможным решением:
String cmd = "This is a \"Test\".";
// This is a "".
String newCmd = cmd.Split('\"')[0] + "\"\"" + cmd.Split('\"')[2];
Console.WriteLine(newCmd);
Console.Read();
вы просто разделить текст на " а затем добавьте обе части вместе и добавьте старый ". Не очень хорошее решение, но оно все равно работает.
€dit:
cmd[0] = "This is a "
cmd[1] = "Test"
cmd[2] = "."
Вы можете сделать это так:
Console.WriteLine("Enter text: ");
var text = Console.ReadLine();
var skipping = false;
var result = string.Empty;
foreach (var c in text)
{
if (!skipping || c == '"') result += c;
if (c == '"') skipping = !skipping;
}
Console.WriteLine(result);
Console.ReadLine();
строка результата создается путем добавления символов из исходной строки, пока мы не находимся между кавычками (используя skipping
переменной).
взять все индексы кавычек удалить текст между кавычками с помощью подстроки.
static void Main(string[] args)
{
string text = @" Today is a very ""nice"" and hot day. Second sentense with ""text"" test";
var foundIndexes = new List<int>();
foundIndexes.Add(0);
for (int i = 0; i < text.Length; i++)
{
if (text[i] == '"')
foundIndexes.Add(i);
}
string result = "";
for(int i =0; i<foundIndexes.Count; i+=2)
{
int length = 0;
if(i == foundIndexes.Count - 1)
{
length = text.Length - foundIndexes[i];
}
else
{
length = foundIndexes[i + 1] - foundIndexes[i]+1;
}
result += text.Substring(foundIndexes[i], length);
}
Console.WriteLine(result);
Console.ReadKey();
}
вывод: Сегодня очень "" и жаркий день. Второй sentense с "" тест";
здесь dotNetFiddle