扫描程序在尝试获取下一个时抛出空指针


public class ScannerTest {
protected Scanner scan;
public ScannerTest(String s) {
Scanner scan = new Scanner(s);
}
public void getone() {
if (scan.hasNext()) {
String temp = scan.next();
temp = temp.replaceAll("[\[\](){}]", "");
System.out.println(temp);
}
}
public static void main(String[] args) {
String s = "(abcd) (defg) (w)";
ScannerTest test = new ScannerTest(s);
Scanner rando = new Scanner(s);
System.out.println(rando.next());
System.out.println(rando.hasNext());
test.getone();
}
}

您是所谓的变量阴影的受害者。带线路

Scanner scan = new Scanner(s); 

您正在声明一个局部变量扫描,而不是在ScannerTest类中初始化您的成员扫描。将上述行更改为

scan = new Scanner(s); 

它将按要求工作。。。

完整的源代码

import java.util.Scanner;
public class SomeClass {
protected Scanner scan;
public SomeClass(String s) {
scan = new Scanner(s);
}
public void getone() {
if (scan.hasNext()){
String temp = scan.next();
temp = temp.replaceAll("[\[\](){}]","");
System.out.println(temp);
}
}
public static void main(String[] args) {
String s = "(abcd) (defg) (w)";
SomeClass test = new SomeClass(s);
Scanner rando = new Scanner(s);
System.out.println(rando.next());
System.out.println(rando.hasNext());
test.getone();
}
}

对奇怪的格式表示歉意,这是我的第一篇文章。在getone((方法中引发了null指针异常。首先在hasNext((,如果我去掉它,在next((。

相关内容

最新更新