【问题标题】:trying to turn a string of words from a file into an array in Java试图将文件中的一串单词转换为Java中的数组
【发布时间】:2015-12-30 14:09:56
【问题描述】:

对不起,如果这是一个非常明显的问题,但我已经尝试了这么多代码,但似乎没有任何效果。我有一个已扫描的文件,然后保存在字符串中。我现在需要将字符串中的单词转换成一个数组,稍后我将把它拆分到一个 JTextfield 中。这是我到目前为止的代码,当我尝试打印数组的内容时,目前我得到一个“没有这样的元素异常”。 也为所有注释掉的代码道歉,但它可能会显示我尝试过的内容,对我有效/无效的内容。

我之前也扫描过它并立即将其转换为 ArrayList 但这不适合项目的其余部分,因此我不得不将其更改为字符串。

public void classesIn() {

    try {

        Scanner input = new Scanner(file);
        // input.useDelimiter("[,\\s]");

        String theTimetable = null;

        while ((theTimetable = input.next()) != null) {
            // System.out.println(theTimetable);

            dasTimetable = theTimetable;
            // System.out.println(dasTimetable);

        }

        // System.out.println(theTimetable[2]);
        // theTimetable.add(input.next());

        input.close();

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

public void stringtoArray(String dt, String[] tt) {

    tt = timeTables;

    // String[]timeTables ;

    dt = dasTimetable;

    timeTables = dasTimetable.split("\\s+");
    for (int i = 0; i < timeTables.length; i++) {
        timeTables[i] = timeTables[i].replaceAll("^\\w]", "");
        System.out.println(timeTable[i]);

        // System.out.println(Arrays.toString(timeTables));
        // System.out.println(words);
        // System.out.println(dasTimetable);

    }
}

【问题讨论】:

  • 您是在尝试将字符串拆分为单词还是字符?
  • 这些方法有什么关系?你能告诉我们发生错误的那一行吗?
  • BTW input.next() 已经将输入分解为单词。
  • 您应该提供一个运行的小示例,您显示的代码中有许多未定义的变量,这会导致大量错误。提高代码的可读性将帮助其他人了解发生了什么

标签: java arrays string exception


【解决方案1】:

如果要将文件中的单词转换为数组,那么最简单的方法是将单词添加到列表中,然后在完成后将列表转换为数组。

这是将文件转换为单词数组的 sn-p:

    Scanner input = new Scanner(file);
    input.useDelimiter("[,\\s]");
    List<String> words = new ArrayList<String>();
    while (input.hasNext()) {
        String s = input.next();
        if (!s.isEmpty()) {
            //System.out.println(s);
            words.add(s);
        }
    }
    input.close();
    // now convert list to an array     
    String[] table = words.toArray(new String[words.size()]);

如果只需要单词可能需要在分隔符模式中添加其他标点符号;例如[,;\\s\\.] 否则会有包含这些字符的单词。

如果想要一个带有连接标记化单词的单个字符串,则使用 StringBuilder 而不是 ArrayList。

StringBuilder sb = StringBuilder();
while (input.hasNext()) {
        String s = input.next();
        if (!s.isEmpty()) {
            if (sb.length() != 0) sb.append(' ');
            sb.append(s);
        }
}
// create concatenated string with all words separated by whitespace
String words = sb.toString();

【讨论】:

    【解决方案2】:

    问题就在这里:

    while ((theTimetable = input.next()) !=null) {
        //System.out.println(theTimetable);
    
        dasTimetable = theTimetable;
        //System.out.println(dasTimetable);
    
    }
    

    你正在用 input.next() 的内容覆盖你的字符串。在该循环终止后,您将只有 input.next() 的列表值保存在 dasTimetable 中。

    我建议您将每次迭代的值附加到一个 ArrayList,然后将其所有内容连接到一个字符串中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-08
      • 2021-08-25
      • 2020-03-26
      • 2014-07-11
      • 2022-05-30
      • 2015-01-26
      • 2016-02-04
      • 1970-01-01
      相关资源
      最近更新 更多