在非静态字符串中使用扫描仪?

时间:2015-02-05 23:28:58

标签: java java.util.scanner

我有一个代码可以搜索文本文件中的单词,但运行它的扫描程序位于该类的public static void main(String [] args)中。我需要能够将扫描仪移动到一个字符串中,这样我就可以通过引用另一个类中的字符串来找到它,而不是在代码中手动输入我想要在代码中搜索的单词。主要方法,带有一个接受单词的构造函数。但是,当我尝试将扫描仪移出main并进入新的公共字符串时,我必须更改System.out.println(arr [0])以返回arr [0],程序不会运行除非我将字符串类型更改为静态。当我这样做时,控制台中没有任何内容,而不是在main中运行时显示的正确输出 这是我的代码:     import java.io.FileInputStream;     import java.util.ArrayList;     import java.util.List;     import java.util.Scanner;

public class Database {
    public String arr45;
    public String hi(String firstName, String lastName){
Scanner theScanner = null;




    try{    
     theScanner = new Scanner(new FileInputStream("Cast.txt"));}

    catch(Exception ex){
        ex.printStackTrace();
    }

    while( theScanner.hasNext()){
    String movie = theScanner.nextLine();
    String[] arr = movie.split("/");

    if(movie.contains(lastName + ", " + firstName))
    {

        theScanner.close();
        String arr45 = arr[0];  


    }

    }
    return arr45;
    }
    public static void main( String[] args ){


}
    }

当string中的所有内容都在main中时,此代码有效,

if(movie.contains(lastName + ", " + firstName))

具有我在括号中用引号搜索的实际名称,以及是否用

替换了返回
System.out.println.  

我已经尝试了很多东西,但我似乎无法弄清楚如何将原始代码转换为一个接收两个变量并执行相同操作的字符串。 以下是正确运行的原始代码:

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Database {
    public static String arr2 = "";

    public static void main( String[] args ){
    Scanner theScanner = null;




    try{    
     theScanner = new Scanner(new FileInputStream("Cast.txt"));}

    catch(Exception ex){
        ex.printStackTrace();
    }

    while( theScanner.hasNext()){
    String movie = theScanner.nextLine();
    String[] arr = movie.split("/");

    if(movie.contains("Hanks, Tom"))
    {

    System.out.println(arr[0]); 
    }
    }

    theScanner.close();
    }

}

最后一件事 - 当然。大概。我被要求制作一个方法,用它的名字搜索所有具有某个单词的演员,然后我就可以使用它,但它只运行一行文本。请告诉我如何将其转到下一行并在完成该行后再次执行此操作:

        while( theScanner6.hasNextLine()){
        String movie = theScanner6.nextLine();
        String[] arr = movie.split("/");

            for(int i = 1; i< 400; i++){

                    if(arr[i].contains(wordD)){
                        int placeholder = i;
                        String[] firstW = arr[placeholder].split(","); 
                         movie = theScanner6.nextLine();

                        System.out.println(firstW[1] + " " + firstW[0]);
                        arr45 = arr[placeholder];   

                    }

            }


        }
        while( !theScanner6.hasNextLine()){
            theScanner6.close();
        }

        return arr45;
        }

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,首先要实例化Database,然后调用方法,

public static void main( String[] args ){
    Database db = new Database();
    db.hi("first", "last");
}

此外,

String arr45 = arr[0];  

应该是

arr45 = arr[0];  

或者遮蔽前面定义的字段(然后阴影超出范围)。