【问题标题】:How to trim comma and dot before or after words如何在单词前后修剪逗号和点
【发布时间】:2016-05-01 17:18:04
【问题描述】:

net web 项目我正在尝试插入带有 3 段的文本的所有单词。如果句子是这样的,但是

“此文本是测试文本。”

然后最后一个词带点进入数据库。 (文字。)

 strNew = strNew.Trim(new Char[] { ' ', ',', '.', '?' });

我已经尝试过这段代码,但没有帮助。这是我的所有代码。

            {int id = 0;
            ListBox1.Items.Clear();
            string strNew = Request.Form["TextBox1"];

            int n = strNew.Split(' ').Length;
            ListBox3.Items.Add(String.Format("Number of Words: {0}", n));

            int m = Regex.Matches(strNew, "[^\r\n]+((\r|\n|\r\n)[^\r\n]+)*").Count;//Counts Number of Paragraphes

            ListBox3.Items.Add(String.Format("Number of Paragraphes: {0}", m));
            strNew = strNew.ToLower();// all lower case
            strNew = strNew.Trim(new Char[] { ' ', ',', '.', '?' });
            var results = strNew.Split(' ').Where(x => x.Length > 1)
                                          .GroupBy(x => x)
                                          .Select(x => new { Count = x.Count(), Word = x.Key });//splitting sentences in to words



            using (con){
    con.Open();

    foreach (var item in results) {//here trying to insert word its id and some other informations but for now they can stay null(yes,null allowed for them)
        id++;
        string w = item.Word.ToString();
        SqlCommand cmd= con.CreateCommand();
        cmd.Parameters.AddWithValue("@id", id);
        cmd.Parameters.AddWithValue("@word", item.Word);
        cmd.CommandText= "INSERT INTO word(id, word, sid, frequency, weight, f) VALUES (@id, @word, 0, 0, 0, 0) ";



       cmd.ExecuteNonQuery(); 

    }
        con.Close();
}        }

【问题讨论】:

    标签: sql asp.net trim


    【解决方案1】:

    问题不在于单行,而在于多段拆分和修剪。

    如果您应用 Trim,它将仅适用于当前行的开头和结尾,而不是段落,因为术语段落在计算机语言字符串中是未知的。

    你应该在将每一行分割成段落后修剪它。

    示例:“此文本是测试文本。\r\n这是另一个测试。”
    当前操作只会修剪最后一个 .,因为 test.\r\nThis 将被识别为 1 个单词。

    代码:

    char[] trimCharacters = { ' ', ',', '.', '?' };
    var results = strNew.Split(new string[] { " ", "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries)
                        .GroupBy(x => x)
                        .Select(x => new { Count = x.Count(), Word = x.Key.Trim(trimCharacters) });
    

    【讨论】:

      【解决方案2】:

      事实上,你不需要修剪你的字符串。

          var matches = System.Text.RegularExpressions.Regex.Matches(strNew, @"(\b\w+\b)")
              .Cast<System.Text.RegularExpressions.Match>();
          var result = matches.GroupBy(m => m.Value)
              .Select(gr => new { Word = gr.Key, Count = gr.Count() });
      
          foreach (var r in result)
          {
              //do whatever you want with r.Word and r.Count
          }
      

      【讨论】:

        【解决方案3】:

        为什么不在拆分后的每个单词上使用 strNew.TrimEnd('.') 或 TrimStart?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-21
          • 2014-03-08
          相关资源
          最近更新 更多