Java,我如何使用.nextLine作为对象引用

时间:2015-10-20 05:56:08

标签: java

我想使用我扫描的内容作为对象的引用,以用于不同类中的方法。基本上是scanner.nextLine()。method();但无论我怎么做,我都找不到符号

我正在扫描一个txt文件,并希望为每个新单词创建一个新的Word,如果该单词重复,我应该使用Word类中的方法增加一个计数器。

    class Word{
int counter = 1;

public counterIncrease(){
counter ++;
}
}

我应该扫描单词,将它们放在一个名为fileArray的ArrayList中,然后检查它们是否重复,如果有的话我应该从Word类增加计数器,如果不是我创建一个新单词

while(scanner.hasNextLine()){
String temp = scanner.nextLine();
   if(fileArray.contains(temp){
       temp.counterIncrease();
   else{
        fileArray.add(new Word(temp);
       }

2 个答案:

答案 0 :(得分:4)

这里至少有三个问题。首先,如果您的fileArrayList<Word>,则您尝试在nextLine()个对象列表中查找字符串(返回类型Word)。那永远无法发挥作用。

其次,您尝试在字符串而不是counterIncrease()的实例上调用Word

第三,当我确定你只想打电话一次时,你多次拨打nextLine()

我强烈怀疑你想要Map<String, Word>,你可以使用:

String line;
while ((line = scanner.nextLine()) != null) {
    Word word = map.get(line);
    if (word === null) {
        map.put(line, new Word(line)); // I assume this constructor exists
    } else {
        word.counterIncrease();
    }
}

此代码每次迭代仅调用nextLine()一次,按字符串查找当前单词,并仅在counterIncrease()的实例上调用Word。 / p>

我会亲自更改Word代码,以便counter为0,直到您拨打counterIncrease,此时循环将变为:

String line;
while ((line = scanner.nextLine()) != null) {
    Word word = map.get(line);
    if (word === null) {
        word = new Word(line);
        map.put(line, word);
    }
    word.counterIncrease();
}

换句话说,您要分离&#34;确保我们有Word个实例&#34;来自&#34;增加单词&#34;的计数。不可否认,这并不是一个巨大的差异......

目前尚不清楚您的Word实际是否具有必要的构造函数 - 它看起来应该是这样的:

public final class Word {
    private int count;
    private final String text;

    public Word(String text) {
        this.text = text;
    }

    public int getCount() {
        return count;
    }

    public int incrementCount() {
        return ++count;
    }

    public String getText() {
        return text;
    }
}

说完这一切之后,如果你只是想要字数,你根本不需要Word课程。您可以使用Map<String, Integer>Map<String, AtomicInteger>。例如:

Map<String, AtomicInteger> map = new LinkedHashMap<>();

String line;
while ((line = scanner.nextLine()) != null) {
    AtomicInteger counter = map.get(line);
    if (counter === null) {
        counter = new AtomicInteger();
        map.put(line, counter);
    } 
    counter.incrementAndGet();
}

答案 1 :(得分:0)

while(scanner.hasNextLine()){
   // you only want to use nexLine() once per while loop, otherwise your scanner goes forward each time
   String line = scanner.nextLine();
   if(fileArray.contains(line){
      //line.increaseCounter(); there is not such a method for String
   else{
        fileArray.add(new Word(line);
       }