2015-02-05 51 views
-4

我有一个搜索文本文件中的单词的代码,但运行它的扫描器位于该类的公共静态void main(String [] args)中。我需要能够将扫描器移动到一个字符串中,这样,我就可以通过引用另一个类的主要方法中的字符串来找到它,而不是在代码中手动输入要在代码中搜索的单词,用一个构造函数接受文字。但是,当我尝试将扫描器移出主体并进入新的公共字符串时,我必须更改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){ 


} 
    } 

此代码的工作时,内部串一切都在主,和

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; 
     } 
+2

明显的缩进会让你的代码看起来不那么疯狂。 – khelwood 2015-02-05 23:36:45

+0

我通常会在我知道我的代码正常工作并完成后执行所有缩进更正。 – 2015-02-05 23:38:14

+1

这意味着在您向人们展示您的代码并寻求帮助之后,您将要修复缩进。这太晚了。 – khelwood 2015-02-05 23:39:22

回答

0

如果我第一次明白你的问题实例化Database然后调用该方法,

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

此外,

String arr45 = arr[0]; 

应该

arr45 = arr[0]; 

或者您对先前定义的字段有阴影(然后阴影超出范围)。

+0

我在另一个类中做了这个,我想调用它,但我得到一个错误,说 异常在线程“主”java.lang.StackOverflowError \t在数据库。 (Database.java:7) – 2015-02-05 23:36:35

+1

发布代码。 – 2015-02-05 23:44:50

+0

我修正了它 - 我把代码放在它引用的类中。一(可能)最后一件事。当它打印出列表时,由于原始文件的格式,任何以单词“The”开头的内容格式化为“movie title,The”。我将如何将“The”移到前面? – 2015-02-06 00:00:37