2016-01-21 93 views
6

我有一个程序,可以在其中输入字符串。但我希望删除引号之间的文字“”。删除引号之间的文本

例子:

在:今天是一个很 “好” 和炎热的一天。

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++; 
       } 
      } 
     } 

我不知道怎么写字符串不带引号之间的文本控制台。 我不允许使用像正则表达式这样的复杂方法。

+1

你可以有多个带引号的字符串如果是这样,你需要将它们删除所有 –

+4

如果。?这是家庭作业,最好用一般的指针来回答,而不是逐字提供答案...... –

+0

我会认为这是作业,所以如果你真的想以基本的方式做到这一点,有一个变量'bool inside = false;当你遇到任何引号时,改变它,当它是虚假的令状e从字符串,当不是不。 –

回答

8

这应该可以做到。它会检查字符串中的每个字符是否包含引号。 如果它发现引号,则将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]; 
    } 
} 

希望这有助于!

+0

我以你的方式做了,它非常简单,它的工作,谢谢你。 – Jolek111

+2

你可以写出这个块,你反过来用'quotesOpened'的值这样:'quotesOpened =!quotesOpened'。 – Aaron

+0

好主意,接受评论。 – GigiSan

6

一个采取无正则表达式,这是我比较喜欢,但是没关系:

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); 

作用:

  • 它搜索的"
  • 然后查找第一次出现第二次出现"
  • 然后它需要第一部分,包括第一部分"和第二部分,包括第二部分"

您可以通过搜索直到字符串结尾并替换所有匹配项来改善此问题。你必须记住你必须搜索的新“第一索引”。

+0

我也试试这个代码,它也在工作,谢谢 – Jolek111

1

这将是一个可能的解决方案:

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] = "." 
1

你可以这样说:

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变量)。

+1

代码块经常只是一个新闻复制到一个解决方案,看看是否看到了正确的结果,这只会导致更进一步的问题,当OP必须扩展功能时,可以通过一个简单的解释来避免,我敢打赌,你花了不到30秒的时间来写。我只是建议你是否想玩FGITW,你也可以做对。 – Sayse

3

首先,我们需要分割字符串,然后删除奇品:

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; 
    } 
+0

This solut离子是整齐的,但它也删除了必须留在输出中的引号。 'out:今天是一个非常热门的日子。 ' – jvanrhyn

+0

是的,正在编辑... –

+0

看起来你以前的解决方案很好。除了一些缺点。为什么当前的解决方案比'String.Join(“”,input.Split('“')要好,选择((part,index)=> index%2!= 0?”\“\”“:part))' ? – Kote

1

以引号所有索引删除使用子引号之间的文本。

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

2
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); 

请试试这个