当我尝试将字符串数组转换为字符数组时出错

问题描述

我是 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[] 来的。

我想我有一个来自字符串 [] split 的翻译错误

解决方法

试试:

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”的输入 所以你的“分裂”结果是:

['']['+']['-']['*']['/'] 

现在,如果您将访问第一个成员,则此调用将在您收到的异常中结束,因为第一个元素为空。

Example here

但要注意 char.Parse 只是接受长度为 1 (read documentation) 的 string 也许你应该考虑在这里使用另一个解析选项。 (Other question which maybe help you)