2016-04-01 13 views
1

私はファイルを受け取ってファイルから他のすべての単語と一緒に配列リストを返すメソッドを書いています。ファイルには複数の行を含めることができます。私は、ファイルをスキャンし、それがArrayListとFile

{"red", "orange", "yellow", "green", "blue", "purple"} 

を読み込む場合
たとえば、メソッドがリストに

{"red","yellow","blue"} 

を返す必要があります私は、これはかなり単純な質問であり、それは既に回答されている場合は注意してくださいね正しい方向に私を指差してください。また、これらはカンマで区切られた変数だと思います。これまでのところ、私は、ヘッダーとスキャナの宣言を持っている:

public static ArrayList<String>Skip(File file) 
ArrayList<String> newList = new ArrayList<String>(); 
Scanner scanner = new scanner(file); 

while(scanner.hasNextLine()){ 
    *WHAT DO I DO HERE* 


newList.add(____); 
} 

scanner.close; 
} 
return newList; 
+0

スキャナを使用してファイル名を取得します。それを追加します。 –

+0

"every other word"のことを達成する1つの方法:単語を追加するかどうかを示す 'boolean'変数' addThisWord'を使用してください。そして、単語を見た後、 'addThisWord =!addThisWord;'は 'true'と' false'の間を行き来します。 – ajb

+0

ファイルから一意の単語のリストが必要ですか? – Mahendra

答えて

0

スキャナは読み取りトークンを可能にし、トークンは、デフォルトでは、空白文字で区切られます。しかし、the javadocが示すように、別の区切り文字を使用することができます。

ファイルの適切な区切り文字を選択し、ファイルトークンをトークンで(行単位ではなく)読み取って、各奇数トークンをリストに追加します(真偽からブール値に変わるブール値を使用できます)トークンを保持または無視する必要があるかどうかを知るために各反復で逆も同様です)。

最後に、コードが例外をスローする場合でも、ファイル上のスキャナーを閉じる必要があります。したがって、try-with-resourcesを使用してスキャナーを初期化し、スキャナが何であっても閉じていることを確認する必要があります。

javadocが役立ちます。それを注意深く読んで何かを試してください。

+0

私はあなたが疑問を誤解していると思う - それは_unique_言葉について何が言いますか? – ajb

+0

ああ、確かに。私はあまりにも早く読んだ。 –

+0

また、同じことが不思議です。そして、スキャナを正しく閉じることはできませんでしたか? –

1

デフォルトでは、スキャナは空白を区切り文字として使用しますが、明示的に別のものを設定することはできます。例えば。

scanner.useDelimiter(","); 

交互の行を選択するには、最も簡単なものは、ループのboolean可変外部を定義し、ループの周り(false -> truetrue -> false)たびに、それを否定することです。

boolean includeItem = true; 

while (...) { 
    ... 
    includeItem = !includeItem; 
} 

スポイラーALERT

ここで一緒にそれを置くと、あなたが必要なものをやっているようだいくつかのコードです:

public static List<String> alternateItemsFrom(File commaSeparatedFile) 
      throws FileNotFoundException { 
    List<String> results = new ArrayList<String>(); 
    boolean includeItem = true; 
    try (Scanner scanner = new Scanner(commaSeparatedFile)) { 
     scanner.useDelimiter(","); 
     while (scanner.hasNext()) { 
      String item = scanner.next().trim(); 
      if (includeItem) { 
       results.add(item); 
      } 
      includeItem = !includeItem; 
     } 
    } 
    return results; 
} 

も注意してください。

  • ファイルに対してScannerを作成すると、FileNotFoundExceptionがスローされることがあります。私はそのメソッドの例外を宣言する必要がありました。

  • ループの後でscanner.close()でスキャナを終了することはできますが、いわゆるtry-with-resourcesブロックを使用してJava 7以降で行う方が良い方法です。これにより、ループ中に例外が発生してもスキャナが閉じられることが保証されます。

  • 私は、方法といくつかの変数の名前を変更し、意図をより明確に表現しようとしました。

+0

whileループはhasNextLine()ではなくhasNext()を使用する必要があります。自分のソリューションを実装するためのヒントを与えるだけでなく、OPの宿題を作ったのは悲しいことです。 –

+0

私はOPが彼女だと思います。彼女はそれが宿題であるとは言わなかった。 –

+0

確かに。その男女の混乱のために申し訳ありません。宿題でなくても、物事をコピーして貼り付けるよりも多くを学ぶことができます。 –