2012-07-25 39 views
0

我其實誤解了這一問題最初,檢查支架和刪除它們

基本上我有檢查是否存在錯誤,並檢查了某些可怕的角色,這將打破它,但是這是不行的與括號,我需要基本檢查是否有任何括號內的字符串之前,通過SQL傳遞,如果有,直接從字符串中刪除它們。

例如說我有一個字符串,它看起來像

[I am a magical string with super powers!){ 

我要刪除所有這些可怕的括號!

if (compiler.Parser.GetErrors().Count == 0) 
     { 
      AstNode root = compiler.Parse(phrase.ToLower()); 
      if (compiler.Parser.GetErrors().Count == 0) 
      { 
       try 
       { 
        fTextSearch = SearchGrammar.ConvertQuery(root, SearchGrammar.TermType.Inflectional); 
       } 
       catch 
       { 
        fTextSearch = phrase; 
       } 
      } 
      else 
      { 
       fTextSearch = phrase; 
      } 
     } 
     else 
     { 
      fTextSearch = phrase; 
     } 

     string[] errorChars = errorChars = new string[] 
     { 
      "'", 
      "&" 
     }; 

     StringBuilder sb = new StringBuilder(); 

     string[] splitString = fTextSearch.Split(errorChars, StringSplitOptions.None); 

     int numNewCharactersAdded = 0; 
     foreach (string itm in splitString) 
     { 
      sb.Append(itm); //append string 
      if (fTextSearch.Length > (sb.Length - numNewCharactersAdded)) 
      { 
       sb.Append(fTextSearch[sb.Length - numNewCharactersAdded]); //append splitting character 
       sb.Append(fTextSearch[sb.Length - numNewCharactersAdded - 1]); //append it again 
       numNewCharactersAdded++; 
      } 
     } 

     string newString = sb.ToString(); 

     //Union with the full text search 
     if (!string.IsNullOrEmpty(fTextSearch)) 
      { 
       sql.AppendLine("UNION"); 
       sql.AppendLine(commonClause); 
       sql.AppendLine(string.Format("AND CONTAINS(nt.text, '{0}', LANGUAGE 'English')", newString)); 
      } 
+2

檢查出['System.String.IndexOf'方法](HTTP:// MSDN。 microsoft.com/en-us/library/kwb0bwyd.aspx)。 – 2012-07-25 13:43:54

+0

每次都是兩個相同的字符嗎? – Brian 2012-07-25 13:44:32

+0

它只適用於括號I.E – 2012-07-25 13:44:47

回答

1

這是一種方法。通過傳入一組字符,然後測試這些字符,而不是硬編碼括號,可以使其更復雜。

var someString = "[Hello" 
if(someString.contains("[")) 
{ 
    someString.Replace("[",""); 
} 
if (someString.Contains("]")) 
{ 
    someString.Replace("]",""); 
} 
+0

嘿再次感謝您的回覆,我實際上已經意識到我誤解了最初的問題,並且我已經重做了這個問題以反映當前問題。 – 2012-07-25 13:55:13

+0

好的。如果我的理解正確,你只是想刪除每個打開或關閉括號的實例。如果是的話,這個代碼將工作。但是,如果是插入到sql數據庫中,你難道不能用「\」來轉義它們嗎? – Brian 2012-07-25 13:57:31

+0

它導致許多問題,我試過這條路線,但它根本不起作用。我仍然留下語法錯誤! – 2012-07-25 13:58:55

0

如果我理解你是對的,你只是想刪除括號,如果他們不匹配。

這種方法將完成的是:

public string MatchPair(string input, string item1, string item2) 
    { 
     var ix1 = input.IndexOf(item1); 
     var ix2 = input.IndexOf(item2); 

     if ((ix1 != -1) && (ix2 != -1)) 
     { 
      return input; 
     } 

     if (ix1 == -1) 
     { 
      return this.CutString(input, ix2, item2); 
     } 

     if (ix2 == -1) 
     { 
      return this.CutString(input, ix1, item1); 
     } 

     return string.Empty; 
    } 

    public string CutString(string input, int ix, string item) 
    { 
     string left = input.Substring(0, ix); 
     string right = input.Substring(ix + item.Length); 

     return left + right; 
    } 

下面是一些TESTDATA,我用:

 var str1 = "[hello]"; 
     var str2 = "[hello"; 
     var str3 = "hel]lo"; 
     var str4 = "hel[lo"; 

     var res1 = this.MatchPair(str1, "[", "]"); 
     var res2 = this.MatchPair(str2, "[", "]"); 
     var res3 = this.MatchPair(str3, "[", "]"); 
     var res4 = this.MatchPair(str4, "[", "]");