如何解决在文本更改 c# 上创建首字母缩略词
我正在尝试在文本更改时使用标题文本框制作首字母缩略词 但是每当我按空格时我都会收到错误消息 我得到的错误是
System.ArgumentOutOfRangeException: '索引和长度必须引用一个 字符串中的位置。参数名称:长度'
private void txtTitle_TextChanged(object sender,EventArgs e)
{
txtARC.Text = "";
if (!String.IsNullOrEmpty(txtTitle.Text))
{
string word = txtTitle.Text.ToString();
string[] wordArry = word.Split(' ');
for(int i=0; i<wordArry.Length; i++)
{
txtARC.Text = wordArry[i].Substring(0,1);
}
}
}
解决方法
如果输入框中的文字是"some words and a space "
,
那么 wordArry
将包含字符串 "some","words","and","a," "space",""
。注意末尾的空字符串!当您尝试获取空字符串的第一个字符时,会出现异常。
您可以在这里做几件事。
您可以指示 string.Split()
忽略那些空字符串:
string[] wordArry = word.Split(new[] { ' ' },StringSplitOptions.RemoveEmptyEntries);
您可以检查对 Substring
的调用范围:
wordArry[i].Substring(0,Math.Min(1,wordArry[i].Length))
或者你可以在循环中跳过空字符串,就像这样
for (int i = 0; i < wordArry.Length; i++)
{
if(string.IsNullOrEmpty(wordArry[i])) {
continue;
}
// Process the string here
}
,
让我们提取方法 - ToAcronym
;我们可以使用正则表达式来实现它:我们可以Match
所有单词(我们定义为非空字母序列)并从每个单词中取出第一个字符词:
代码:
using System.Linq;
using System.Text.RegularExpressions;
...
public static string ToAcronym(string value) {
if (string.IsNullOrWhiteSpace(value))
return "";
return string.Concat(Regex
.Matches(value,@"\p{L}+")
.Cast<Match>()
.Select(match => match.Value[0]));
}
演示:
string[] tests = new string[] {
"Quick Brown Fox","word","Два Слова",// "Two Words" in Russian
"Have (Some) Punctuation!"
};
string report = string.Join(Environment.NewLine,tests
.Select(test => $"{test,-25} => {ToAcronym(test)}"));
Console.Write(report);
结果:
Quick Brown Fox => QBF
word => w
Два Слова => ДС
Have (Some) Punctuation! => HSP
您的代码可以
private void txtTitle_TextChanged(object sender,EventArgs e) {
txtARC.Text = ToAcronym(txtTitle.Text);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。