【问题标题】:C#: Alter numbers inside the textboxC#:更改文本框中的数字
【发布时间】:2011-08-19 23:10:23
【问题描述】:

我正在制作一个文本到语音的程序,到目前为止,我有一个包含应该说的内容的文本框。但是,我希望程序一次说一个文本框中的数字。例如,文本框可能包含以下内容:

“这是一个数字 3820 这是另一个数字 3823”

我希望程序单独说出数字,例如“这是一个数字三八二零”。仅当中间有逗号时,文本到语音服务器才会将数字分开。所以文本框应该有这个:

"这是一个数字 3,8,2,0,这是另一个数字 3,8,2,3,"

另外,有没有办法在单词后面搜索数字并更改该数字。例如只更改“帐户”一词后的数字?示例:

“这是一个帐户 3029 这是一个数字 3009 这是另一个帐户 3030”

“这是一个帐户 3,0,2,9,这是一个数字 3009 这是另一个帐户 3,0,3,0,”

【问题讨论】:

    标签: c# textbox numbers comma alter


    【解决方案1】:

    你考虑过简单的字符串替换吗?即

    myText = myText.Replace("1", "1,");
    

    对每个数字重复

    您还需要编辑文本框,您不能在将文本(从文本框中获取)发送到文本到语音实用程序之前处理它吗?

    【讨论】:

    • 这行得通,可能是我没有意识到的一个严重错误。接下来我的问题(我忘记将其添加到原始问题中,我现在将对其进行编辑)是如何编辑一些数字同时保持其余部分不变?例如“这是一个账户 3029 这是一个数字 3009”,我想要它作为“这是一个账户 3,0,2,9,这是一个数字 3009”?这是更重要的问题。
    • 如何区分数字,即修改哪一个,不修改哪一个。如果只是第一个数字,那么詹姆斯布莱克的答案可以用来找到第一个数字,然后按照建议进行字符串替换。
    • 数字会根据前一个单词而改变。例如,只有单词“account”之后的数字会被改变。那么有没有办法找到“帐户”这个词,然后如果下一个字符是数字,则添加一个逗号并继续这样做,直到字符不是数字?
    • 然后我会说使用 string.Split -> 迭代到单词 account 检查下一个条目是否为数字 -> 使用 string.Replace(或正则表达式)解析它 -> 使用字符串.Join 将其全部合并回来
    【解决方案2】:

    沿空格和其他空格分割,然后您可以检查每个单词是否为数字。

    然后你可以把那个词转换成字符,加上逗号,然后放回去。

    理想情况下,如果您的文本转语音解决方案支持它,请将其复制回隐藏的文本字段,然后将其用于语音,这样用户就不会看到修改。

    不过,为简单起见,您可能只想使用 tryParse:

    http://msdn.microsoft.com/en-us/library/f02979c7.aspx

    bool result = Int32.TryParse(value, out number);
    

    其中 value 是 String

    更新

    阅读问题的编辑后,通过拆分为单词,然后将字符串转换为小写,这样您就可以轻松比较,然后,只需遍历每个单词。

    StringBuilder buf = new StringBuilder();
    for(int t = 0; t < wordarray.length - 1; t++) {
      String s = wordarray[t];
      if (numberWord.contains(s) && isWordNumber(wordarray[t + 1]) {
          s = addCommas(wordarray[t + 1]);
      }
      buf.append(' ').append(s);
    }
    

    【讨论】:

      【解决方案3】:

      此方法将解析数字并以逗号分隔格式:

      public string ParseNumbers(string expression)
      {
          return string.Join(",", System.Text.RegularExpressions.Regex.Split(expression, "[^\\d]"));
      }
      

      【讨论】:

        【解决方案4】:

        您需要在文本框中添加一个事件(例如 KeyPress)处理程序。

        TextBox1.KeyPress +=
                        new KeyPressEventHandler(TextBox1_KeyPress);
        
        void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
                {
        //do your check here.
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-18
          • 1970-01-01
          • 2023-03-17
          • 1970-01-01
          相关资源
          最近更新 更多