当前位置: 首页 > 知识库问答 >
问题:

向类构造函数中的字符串数组添加新字符串

史飞尘
2023-03-14

我正在做一项关于使用结构化/半结构化/非结构化数据的作业,我正在对莎士比亚的戏剧进行字数统计(以了解语言如何随时间变化),方法是导入每部戏剧的txt文件和xml索引文件,该文件存储有关每部戏剧的关键信息,如编写年份、角色列表等。。然后,我将删除字符名、设置、标点符号和常用词(和、但、或,如果等…)从txt文件准备好进行字数统计-全部在C#中运行的控制台脚本中。我正在编写一个类,每个剧本的数据都将存储在这个类中,目前看起来是这样的:

    class PlayImport
{
    public string Title;
    public DateTime Year;
    public string location;
    public string[] Cast;
    public Counter[] WordCount;

    public PlayImport(string location, int Num)
    {
        XmlDocument Reader = new XmlDocument();
        Reader.Load(location);
        this.Title = Convert.ToString(Reader.DocumentElement.ChildNodes[Num].Attributes["Title"].Value);
        this.Year = Convert.ToDateTime(Reader.DocumentElement.ChildNodes[Num].Attributes["Year"].Value);
        this.location = Convert.ToString(Reader.DocumentElement.ChildNodes[Num].Attributes["Location"].Value);
        foreach (XmlNode xmlNode in Reader.DocumentElement.ChildNodes[Num].ChildNodes[0].ChildNodes)
            this.Cast += Convert.ToString(xmlNode.Attributes["Name"].Value);
    }
}

然而,最后一行(Cast=)给出了一个错误,不能将string转换为string[]。如何绕过这个问题,使字符列表捆绑在一起进入Cast字符串数组?

共有1个答案

罗寒
2023-03-14
public string[] Cast;

上面的一行是一个数组的声明,这个数组还没有在任何地方初始化。因此,在您通知编译器您想用存储一定数量字符串的空间初始化它之前,您不能在这里添加任何内容。

....
this.Cast += Convert.ToString(xmlNode.Attributes["Name"].Value);

相反,此行尝试在上一个数组上执行=操作
这是不可能的,因为没有为能够执行该操作的数组定义运算符,因此会出现错误

一种非常简单且更好的方法是将Cast字段声明为列表

public List<string> Cast = new List<string>();

然后在foreach中,只需向现有字符串集合添加一个新字符串

foreach (XmlNode xmlNode in Reader.DocumentElement.ChildNodes[Num].ChildNodes[0].ChildNodes)
   this.Cast.Add(Convert.ToString(xmlNode.Attributes["Name"].Value));

使用列表而不是数组的优点基本上是,您不需要事先知道要在数组中存储多少字符串,而是列表自动扩展其内部存储以容纳新条目。

 类似资料:
  • 问题内容: 我是Java新手,所以我几乎不需要帮助 我有 我想向此数组(脚本)添加新的字符串(string1,string2)作为示例 我想在以后的阶段中不添加新字符串 我该怎么办? 问题答案: 您无法在Java中调整数组的大小。 声明数组的大小后,它将保持固定。 相反,您可以使用具有动态大小的对象,这意味着您无需担心其大小。如果数组列表的大小不足以容纳新值,则它将自动调整大小。

  • 问题内容: 我正在查看String API,突然我遇到了一个String空的构造方法,即我们可以使用以下方法构造一个空的String对象: 我不知道有什么用吗? 问题答案: 当然..... 将在堆创建一个非文字串对象 ,这 将是 垃圾收集。 在哪里 将创建一个String Literal 。这 将不会被 垃圾收集过,如果是通过默认加载器访问。 看到下面这个链接,我问了一个问题。这可能与您的问题没有

  • 我最近了解了Java字符串池,有几件事我不太明白。 使用赋值操作符时,如果字符串池中不存在新字符串,则将在字符串池中创建新字符串。 当使用String构造函数时,我明白无论String池的状态如何,都将在堆中、String池之外创建一个新字符串。 我在某处读到过,即使在使用构造函数时,也在使用字符串池。它将把字符串插入到字符串池和堆中。 我没有找到任何关于这方面的进一步信息,但我想知道这是不是真的

  • 问题内容: 在Java中,以以下方式初始化String数组是完全合法的: 但是,当尝试实例化以String数组作为参数的类时,不允许以下代码: 但这再次起作用: 有人可以解释为什么吗? 问题答案: String[] s = {“FOO”, “BAR”}; 仅在声明时允许 你不能

  • 我想在JComboBoxe中显示我的名为CodeA(类型为String)的变量中的每个项。我有一条错误消息: 我不明白和之间的转换 编辑:在此处输入图像描述

  • 我有两个类, 并且它只是抛出异常,似乎没有分配。为什么?