扫描仪从文件而不是控制台读取

时间:2015-02-03 02:40:41

标签: java java.util.scanner

我试图通过使用命令" java PostFix<来获取文件中的表达式来评估后缀表达式。 in.dat&#34 ;.现在,当我想从用户(即控制台)获取变量的值时,它恰好是从文件读取并给出输入不匹配异常(因为它从文件而不是从控制台读取字符串值)。以下是我的代码的摘录。如何从控制台而不是文件中获取输入?

public class PostFix{ 

    String operators[] = new String[]{"+","-","*","/","_","!","#","^","<","<=",">",">=","==","!=","&&","||","$"};
    ArrayList<String> variables = new ArrayList<String>();
    ArrayList<Integer> variable_value = new ArrayList<Integer>();

public static void main(String[] args) {
    // TODO Auto-generated method stub

    PostFix pf = new PostFix();
    pf.getVariables();

}

public void getVariables(){

    Scanner sc = new Scanner(System.in);
    String line = sc.nextLine();
    String tokens[] = line.split(" ");

    while(sc.hasNextLine()){
        System.out.println("in geVariables()");
        for(int i = 0; i < tokens.length; i++){

            if(!Arrays.asList(operators).contains(tokens[i])){

                try{
                Integer.parseInt(tokens[i]);    
                }
                catch(Exception e){
                    //e.printStackTrace();

                    variables.add(tokens[i]);
                    System.out.println("Please enter the value of "+tokens[i]);
                    variable_value.add(sc.nextInt());
                }

            }

        }

    }
    sc.close();     
    }   

}

错误:

  

请输入一个
的值   线程&#34; main&#34;中的例外情况java.util.InputMismatchException
  在java.util.Scanner.throwFor(未知来源)
  在java.util.Scanner.next(未知来源)
  在java.util.Scanner.nextInt(未知来源)
  在java.util.Scanner.nextInt(未知来源)
  在PostFix.getVariables(PostFix.java:51)
  在PostFix.main(PostFix.java:16)

in.dat文件的内容:

  

2 a + b _ *! c c ^ 15 /# - $
  值x +值y - != x y&lt; =&amp;&amp; $

1 个答案:

答案 0 :(得分:1)

java PostFix < in.dat

表示所有标准输入都将来自in.dat文件。

您的Java代码不了解此重定向。它只是从System.in(即标准输入)读取,这通常意味着键盘

因此,解决方案是简单地让您的代码在没有任何重定向的情况下运行

java PostFix