2017-09-25 18 views
-6

特定のファイルを見つけて、そのファイルからテキスト行を出力する方法について助けが必要です。コンソールに入力された文字列がそのテキスト行の文字列と一致すると、テキスト行が出力されます。私はjava Find ring report.txt address.txt Homework.javaを呼び出すした場合例えば、それはのようなものを印刷する必要があります:ファイルを検索して検索する方法JAVA

report.txt: has broken up an internationa ring of DVD bootleggers that

address.txt: Kris Kringle, North Pole

address.txt: Homer Simpson, Springfield

Homework.java: String file name;

指定されたワードは、常に最初のコマンドライン引数です。

これは私がこれまで持っているものです。

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 


/** 
* Code for E11.8. Searches all files specified on the command line and prints out all lines  
    containing a specified word. 
* @Michael Goedken 
*/ 
public class Find 
{ 
    /** 
     Searches file for a word, prints out all lines containing that word. 
     @param wordToFind the word to find 
     @param filename the filename for the file to search 
    */ 
    public static void findAndPrint(String wordToFind, String filename) 
    { 
    String input = args[0]; 
    for (int i = 1; i < args.length; i++) 
    { 
     System.out.println(" File " + args[i]); 
     File one = new File(args[i]); 
     Scanner in = new Scanner(one); 

     while (in.hasNext()) 
     { 
      String line = in.nextLine(); 
      if (line.contains(input)) 
      { 
       System.out.println(line); 
      } 
     } 
    } 


} 

    /** 
     First argument of the main method should be the word to be searched 
     For other arguments of the main method, store the file names to be examined 
    */ 
public static void main(String[] args) 
{ 
    // call findAndPrint for each text file 



    } 
} 
+1

コードを実行するとどうなりますか? – notyou

+1

@pruntlar構文エラーargsの変数がありません – sdfjbs

+0

'findAndPrint'メソッドで' args [0] 'を読み込もうとしています。 String [] args'パラメータを持っているので 'main'で動くかもしれませんが、' findAndPrint'メソッドの文脈では意味がありません。 – Aaron

答えて

-2

[OK]を、私は今、あなたの問題を取得すると思います。

あなたがメインからあなたのメソッドを呼び出すことができます。

public static void main(String[] args) { 
//may need to throw file not found exception here 
     findAndPrint(); 
    } 

次に、あなたのメソッドから引数を削除する必要があります。

public static void findAndPrint() throws FileNotFoundException { 
     Scanner in = new Scanner(new FileReader("C:\\yourfilepath\\actualfile.txt")); 
     //you can get user input etc here if necessary 
     String input = "pass"; 
     while (in.hasNext()) { 
      String line = in.nextLine(); 
      if (line.contains(input)) { 
       System.out.println(line); 
      } 
     } 
    } 
+0

具体的な説明と現在のコードを修正しようとするのではなく、問題を解決するために別のコードを書くことをお勧めしません。 – progyammer

+0

まったく別のコードではありません。 OPコードが変更されました。わずかな変更だけです。 – notyou

0

私はメインの引数を追加しました。私はコードを実行していないので、それはあなたのデバッグとテストです。あなたが機能findAndPrint()の範囲内にない配列args[]にアクセスしようとしている

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 


/** 
* Code for E11.8. Searches all files specified on the command line and prints out all lines containing a specified word. 
* @Michael Goedken 
*/ 
public class Find { 
    /** Searches file for a word, prints out all lines containing that word. 
    @param wordToFind the word to find 
    @param filename the filename for the file to search 
    */ 
    public static void findAndPrint(String wordToFind, String filename) { 
    System.out.println(" File " + filename); 
    File one = new File(filename); 
    Scanner in; 
    try { 
     in = new Scanner(one); 
     while (in.hasNext()) { 
      String line = in.nextLine(); 
      if (line.contains(wordToFind)) { 
       System.out.println(line); 
      } 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 




public static void main(String[] args) { 
    int length = args.length; 
    if (length > 0) { 
     String wordToFind = args[0]; 
     // now gather file names, bypassing first string 
     for (int ii = 1; ii < length; ii++) { 
      findAndPrint(wordToFind, args[ii]);   
     } 
    } 
} 

}

+0

@progyammer、これであなたの質問は解決しましたか? –

1

。あなたは、mainメソッド内の関数呼び出し文の引数としてargs[0]を渡す必要があります:

public static void main(String[] args){ 
    findAndPrint(args[0], args[1]); //for report.txt 
    findAndPrint(args[0], args[2]); //for address.txt 
} 

argsは、mainメソッドの引数です。個々のコマンドライン入力を格納する文字列配列です。あなたの場合、配列args[]の内容は= {"ring", "reports.txt", "address.txt", "Homework.java"}です。

あなたは今、このようにあなたのfindAndPrint()機能を変更することができます。

static void findAndPrint(String wordToFind, String filename){ 
    Scanner fscan = new Scanner(new File(filename)); 
    String str = ""; 
    while((str = fscan.nextLine()) != null){ 
     if(str.contains(wordToFind)) 
      System.out.println(str); 
    } 
} 
-1

これは、ソリューションとして動作するようです!

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.Scanner; 


/** 
* Code for E11.8. Searches all files specified on the command line and prints  out all lines  
    containing a specified word. 
* @Michael Goedken 
*/ 
public class Find 
{ 
    /** 
    Searches file for a word, prints out all lines containing that word. 
    @param wordToFind the word to find 
    @param filename the filename for the file to search 
    */ 
    public static void findAndPrint(String wordToFind, String filename) throws FileNotFoundException 
{ 
    Scanner in = new Scanner(new FileReader(filename)); 

    String input = wordToFind; 
    while (in.hasNext()) 
    { 
     String line = in.nextLine(); 
     if (line.contains(input)) 
     { 
      System.out.println(line); 
     } 
    } 
} 

/** 
    First argument of the main method should be the word to be searched 
    For other arguments of the main method, store the file names to be examined 
*/ 
    public static void main(String[] args) throws FileNotFoundException 
{ 
    // call findAndPrint for each text file 

    findAndPrint("tt", "/Users/MichaelGoedken/Desktop/mary.txt"); 

    findAndPrint("0", "/Users/MichaelGoedken/Desktop/transactions.txt"); 

    } 
} 
関連する問題