0

我需要一些帮助,无论我尝试将其放入下面编写的代码中,它都不起作用。我希望它从文件 Alice.txt 中读取,然后将每个单词放入带有小写字母的数组 ordArray 中,然后使用程序的其余部分来计算每个单词、每个单词的每次出现和每个唯一单词。请,请帮助!如果你能给我一些关于我可以做得更好的提示,或者我应该如何实现将信息写入文件 Opplysning.txt 的部分,请不要保持沉默。

try {
        File skrivFil = new File("Opplysning.txt");
        FileWriter fw= new FileWriter(skrivFil);
        BufferedWriter bw = new BufferedWriter(fw);

        Scanner lesFil = new Scanner("Alice.txt");
        int i=0;
        int totalOrd=0;
        int antUnikeOrd=0;

        String[] ordArray = new String[5000];
        int[] antallOrd = new int[5000];    
        String ord = lesFil.next().toLowerCase();
        totalOrd++;
        boolean ordFraFor=false;
        int y=0;
        int z=0;

        for(i=0; i<ordArray.length; i++) {
             if (ord.equals(ordArray[i])) {
        antallOrd[i]++;
        ordFraFor=true;
        }
    }
        if(ordFraFor=false) {
            antUnikeOrd++;
            y=0;
            boolean ordOpptelling=false;

        while(ordOpptelling=false) {
        if(ordArray[y] == null) {
            ordArray[y] = ord;
            antallOrd[y]++;
            ordOpptelling=true;
        }
        y++;
    }
}

        for(String s: ordArray) {
        System.out.println(s);
        }
        lesFil.close();

        } catch (Exception e){
        System.out.print(e);
        }
    }
}

编辑:尝试添加文件,我想它有效,但我仍然无法写入数组。我在这方面真的很糟糕,这就是为什么我必须在下周真正得到这些东西的原因......无论如何,我试图将所有单词添加到一个数组列表中,我希望它会起作用。它没有,而是给了我一个 nosuchelementexception 。代码部分:

File tekstFil = new File ("Alice.txt");
Scanner lesFil = new Scanner(tekstFil);
int i=0;
int totalOrd=0;
int antUnikeOrd=0;

ArrayList<String> liste = new ArrayList<String>();
while (lesFil.hasNext()){
  liste.add(lesFil.next());
}

String[] ordArray =liste.toArray(new String[liste.size()]);;
int[] antallOrd = new int[5000];
4

1 回答 1

2

您的扫描仪正在尝试扫描字符串文字“Alice.txt”,而不是相应的文件。如果你想要文件,那么首先构造你的文件,然后将它传递给 Scanner 构造函数:

File textFile = new File("Alice.text"); // or file path variable
Scanner fileScanner = new Scanner(textFile);

// go to town with your Scanner

或者,...

InputStream inStream = getClass().getResourceAsStream(someResourcePath);
Scanner myTextScanner = new Scanner(inStream);

接下来我们将讨论不使用 ArrayList 而是使用Map<String, Integer>诸如HashMap<String, Integer>.


编辑
你状态:

尝试添加文件,我想它有效,但我仍然无法写入数组。我在这方面真的很糟糕,这就是为什么我必须在下周真正得到这些东西的原因......无论如何,我试图将所有单词添加到一个数组列表中,我希望它会起作用。它没有,而是给了我一个 nosuchelementexception 。代码部分:

我建议您停下来,暂停您的程序,并尝试单独解决程序的每个部分。首先看看你是否真的得到你的文件。

创建类似这样的内容,但当然要更改文件路径以使其有效:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Foo {

   // **** you will use a different String literal here!! ****
   private static final String FILE_PATH = "src/foo/foo.txt";

   public static void main(String[] args) throws FileNotFoundException {
      File file = new File(FILE_PATH);

      // check if file exits and if we're looking in the right place
      System.out.println("File path: " + file.getAbsolutePath());
      System.out.println("file exists: " + file.exists());

      Scanner scan = new Scanner(file);

      // scan through file to make sure that it holds the text 
      // we think it does, and that scanner works.
      while (scan.hasNextLine()) {
         String line = scan.nextLine();
         System.out.println(line);
      }
   }
}

然后只有在你得到这个工作之后,才能将文本读入你的 ArrayList。

和往常一样,请努力改进您的代码格式,尤其是缩进。如果您收到错误或异常,请在此处打印整个文本并指出哪一行代码引发了异常。

于 2013-10-11T21:34:27.147 回答