C#:更改文本框中的数字
Posted
技术标签:
【中文标题】C#:更改文本框中的数字【英文标题】:C#: Alter numbers inside the textbox 【发布时间】: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,”
【问题讨论】:
【参考方案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.
【讨论】:
以上是关于C#:更改文本框中的数字的主要内容,如果未能解决你的问题,请参考以下文章