c#中的string.Replace()和string.Split()

时间:2013-11-27 02:42:08

标签: c# regex arrays string

我有一堆存储过程脚本,我存储在一个数组中。每个数组都包含一个过程(即正常的创建过程......)。但是,当传递给数组时,文本中的空格将被替换为数组中的\ t和\ r,而下一行将使用\ n重新复制。我现在想要将每个过程文本分解为单词并存储在数组中。但是分割功能

for (int i = 0; i < text.Length; i++)
{
  string[] words = new string[text[i].Split('\t', '\n').Length];


}

上面的数组字但是当我选中时,保持一个空值的字符串。它不会返回它所假设的单词。我想可能是我必须在拆分之前替换\ n \ r \ t,如下所示...... \

text[i].Replace("\n", string.Empty)

以上仍然不起作用。请任何帮助将不胜感激。我想将文本拆分为单词串。下面是整个方法快照。该方法接收值过程名称数组,我希望该方法提取每个给定名称的过程文本,然后将每个存储过程文本拆分为我稍后将使用的单词。我想循环,通过确定在另一个之后跟随哪个单词来执行简单的搜索。

更新

private void text(string[] array)
       {
           DataSet ds = new DataSet();
           string sql = "";
           progressBar1.Value = progressBar1.Minimum;

           using (SqlCommand command = new SqlCommand())
           {
               string[] text = new string[array.Length];
               string[] name = new string[array.Length];
               for (int i = 0; i < array.Length; i++)
               {
                   command.Parameters.Clear();
                   sql = @"SELECT DISTINCT so.name, so.type,text FROM sys.sysobjects so with (nolock) INNER JOIN sys.syscomments sc with (nolock)
                               ON so.id=sc.id WHERE name=@name";
                   command.Connection = getconnection();
                   command.CommandText = sql;
                   command.CommandType = CommandType.Text;
                   command.Parameters.AddWithValue("@name", array[i].ToString());


                   using (SqlDataAdapter adp = new SqlDataAdapter(command))
                   {


                       ds = new DataSet();
                       adp.Fill(ds);
                   }
                   if (ds.Tables[0].Rows.Count > 0)
                   {


                       for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
                       {

                           text[i] = ds.Tables[0].Rows[0]["text"].ToString();
                           name[i] = ds.Tables[0].Rows[0]["name"].ToString();
                       }
                   }
                   double e = (Convert.ToDouble(i) / Convert.ToDouble(array.Length));
                   progressBar1.Value = Convert.ToInt16(e * 100);
               }

               int count = 0 ;

               for (int i = 0; i < text.Length; i++)
               {

                   text[i].Replace("\n", string.Empty); 

                   string[] words = new string[text[i].Split(new string[] { "\t", "\n" }, StringSplitOptions.RemoveEmptyEntries).Length];

                   for(int j = 0; j < words.Length ; j++)
                   {
                      // words[j] = text[i].Split(new string { " " }, StringSplitOptions.None);// = words[j].;
                       words[j] = words[j];
                   }
               }

           }
       }

2 个答案:

答案 0 :(得分:1)

为了删除split语句中的空条目,请考虑以下重写...

string[] words = new string[text[i].Split(new string[] { "\t", "\n" }, StringSplitOptions.RemoveEmptyEntries  ).Length];

祝你好运!

答案 1 :(得分:0)

您的字符串数组中充满了空字符串,因为您从不为其分配任何字符串。您正在运行正确的Split语句,对结果进行计数,然后将其丢弃而不将其保存在任何位置。

这一行:

    string[] words = new string[text[i].Split('\t', '\n').Length];

与这两者完全相同:

    int length = text[i].Split('\t', '\n').Length;
    string[] words = new string[length];

当您明确使用string[] s = new string[...]创建数组时,您不会为数组提供数据,而只是提供大小。如果要将数据放入数组,则需要单独进行。

在这种情况下,使用new是多余的 - string.Split已经创建并填充一个新数组并将其返回,您可以按如下方式将其分配给新变量:

    string[] words = text[i].Split('\t', '\n');