问题描述
我是 c# 新手,我想为学校创建一个计算器,但在第 45 行出现错误。错误消息:字符串必须正好是一个字符长。我认为在拆分 String 数组然后另存为 char 数组后出现错误。但我不知道为什么,可能是假字符。
代码部分:
string eingabe = txtergebnis.Text;
string[] zahlen;
string[] Operatoren;
zahlen = eingabe.Split('+','-','*','/');
Operatoren = eingabe.Split('0','1','2','3','4','5','6','7','8','9',',');
double[] dZahlen = zahlen.Select(double.Parse).ToArray();
char[] charOperatoren = Operatoren.Select(char.Parse).ToArray();
string stringOperatoren = new string(charOperatoren);
错误信息是通过 char[] 来的。
解决方法
试试:
char[] charOperatoren = eingabe.Where(x => x != ',' && !char.IsDigit(x)).ToArray();
关于错误:
char.Parse()
只接受长度为 1 的 strings
。
Operatoren
的某些成员包含多于或少于一个字符(例如 empty string
)。
当您拆分不同的数字时,例如“12”将给出 3 个空字符串作为结果:
- 在字符串开始之前
- 在“1”和“2”之间
- 在字符串的末尾
空字符串不能是字符。一个解决方案:
Operatoren = eingabe.Split(new[] {'0','1','2','3','4','5','6','7','8','9',','},StringSplitOptions.RemoveEmptyEntries);
这将删除那些空字符串。
,您的情况的解决方案是使用:
Operatoren.Where(o => !string.IsNullOrEmpty(o)).Select(char.Parse).ToArray();
因为您要按数字拆分运算符。
想想你正在处理一个“1+2-3*4/5”的输入 所以你的“分裂”结果是:
['']['+']['-']['*']['/']
现在,如果您将访问第一个成员,则此调用将在您收到的异常中结束,因为第一个元素为空。
但要注意 char.Parse
只是接受长度为 1 (read documentation) 的 string
也许你应该考虑在这里使用另一个解析选项。 (Other question which maybe help you)