代码目的:想得到符号两边的数字。
提示输入后能得到第一个next()然后就死掉不动了?请问这是为什么呀??import java.util.Scanner;public class TestScannerDelimit {
public static void main(String[] s){
System.out.println("请输入表达式,例如:3+2,5*3");
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("[\\+\\-\\*\\/]");
while(scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}
提示输入后能得到第一个next()然后就死掉不动了?请问这是为什么呀??import java.util.Scanner;public class TestScannerDelimit {
public static void main(String[] s){
System.out.println("请输入表达式,例如:3+2,5*3");
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("[\\+\\-\\*\\/]");
while(scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}
String st = scanner.next();
System.out.println(st);
哪里是死掉不动,是scanner继续等待从流中读数据呀。
原因是:若Scanner sc=new Scanner(new File("text.txt"));
则scanner将一直从文件流中读下去,直至读到流结束(即:文件结束为止)。
同样道理:Scanner sc=new Scanner(System.in);也是一直从System.in流读下去,直至System.in流结束。
因此:楼主要按Ctrl+Z来告知scanner,System.in流已结束。
public class Keyboard{
static BufferedReader inputStream = new BufferedReader
(new InputStreamReader(System.in));
public static int getInteger() {
try{
return (Integer.valueOf(inputStream.readLine().trim()).intValue());
}
catch (Exception e) { e.printStackTrace(); return 0; }
}
public static String getString() {
try{
return (inputStream.readLine());
}
catch (IOException e) { return "0";}
}
}