2017-11-30 3 views
0

私は、先生が学生を名簿からつかまえて、ランダムなグループに投げ入れることができるようなプログラムを作成しようとしています。私はそれに学生名の束を持っているテキストファイルからarraylistを作成する予定です。私はファイルから生徒の名前を引っ張り、名前を配列リストに挿入するのに役立つ必要があります。配列は、(あまりにも他の場所が、プログラムが完了していない)便利になるだろうのはここjavaのテキストファイルから文字列配列リストを作成するにはどうすればよいですか?

は次のとおりです。

try { 

    System.out.println("Please enter the name of the student that you would like to add to the file as \"Last name, First name\""); 
    PrintWriter outputStream = new PrintWriter(new FileOutputStream(fileName, true)); 
    Scanner sc = new Scanner(System.in); 
    String s = sc.next(); 

       outputStream.println(s); 

       sc.close(); 
       outputStream.close(); 

    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 

私も、私はこのクラスを作成したので、このプログラムでは、クラスのカップルが関与する必要があり、私の私が考えているのは、ファイルに入っている生徒のためのオープン変数を作成できるということです。

public class Name { 

    private String studentName; 

    public Name() { 
    } 

    public Name(String studentName) { 
     this.studentName = studentName; 
    } 


    public String getstudentName() { 
     return studentName; 
    } 


    public void setstudentName(String studentName) { 
     this.studentName = studentName; 
     } 

} 

そして、ここでいくつかの名前を持つテキストファイルです、私にとってchallening部分が名を区切るカンマがあることである(多分私はそれを削除してください):

Ospina, Bryan 
Patel, Krupa 
Preite, Nicholas 
Quigley, Kevin 
Rubet, Aaron 
Said, Abanoub 
Sidler, Allen 
Thiberge, Daniel 
Thota, Raajith 
Tripathi, Rashi  
Tsang, Johnny 
Velovic, Joseph 
Victor, Samuel 
Whitted-Mckoy, Eric 
Wu, Michelle 

編集:コンデンスコード

+2

ここではあまりにも多くのコードがあるので、私はこの質問をd​​ownvotedしました。あなたの問題がどこにあるのかを明確にするためには、問題を直接引き起こしていないコードを削除してください。もしそれを10行以下に減らすことができれば、私はdownvoteを引っ込めることを検討します。参照:[最小限で完全で検証可能な例の作成方法](http://stackoverflow.com/help/mcve)と[小規模プログラムのデバッグ方法](https://ericlippert.com/2014/03/05)/how-to-debug-small-programs /) –

+0

@JoeCそれについては申し訳ありません!私はコードのすべてがなければ、プログラムの性質に十分な文脈を提供しないだろうと恐れていました。私は先に進み、直接関連していないものをすべて削除しました:) – Bryan

答えて

0

は、あなたのタスクを達成するためにどのように別の方法でありますScannerクラスを使用すると、次のようにファイルを読むことができます:Scanner scan = new Scanner(new File(fileName))。ファイルの終わりまでscan.nextLine()while (scan.hasNext())までファイルを1行ずつ読み込みます。 new instanceNamenew Name(scan.nextLine().replace(",", ""))と作成し、listnames.add(...)に追加します。削除するには,replace(",", "")メソッドStringクラスを使用します。

+0

これは素晴らしく機能しました!コードの説明に感謝します! – Bryan

0

Javaのテキストファイルから文字列配列リストを作成するにはどうすればよいですか?

ファイルの最後まで読む必要があります。ファイルの最後までBufferedReaderを使用してアプローチの1つを示しています。によって

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

public class Scan { 

    public static void main(String[] args) { 
     String fileName = "text.txt"; 
     List<Name> names = new ArrayList<>(); 

     try (Scanner scan = new Scanner(new File(fileName))) { 
      while (scan.hasNext()) 
       names.add(new Name(scan.nextLine().replace(",", ""))); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

     System.out.println(names); 
    } 

    public static class Name { 
     private final String studentName; 

     public Name(String studentName) { 
      this.studentName = studentName; 
     } 

     public String getstudentName() { 
      return studentName; 
     } 

     @Override 
     public String toString() { 
      return studentName; 
     } 
    } 
} 

:あなたの宿題のために使用することはできませんストリームを、使用

BufferedReader br = new BufferedReader(new FileReader("pathToYourFile")); 
String input = null; 
String [] splittedInput = null; 
String fullName = null; 
List<Name> names = new ArrayList<>(); // Maintaining all the names 
while((input = br.readLine()) != null) { // Until the End 
splittedInput = input.split(","); 
fullName = splittedInput[1] + splittedInput[0]; // Since file stoes lastname,firstname 
    names.add(new Name(fullName)); 
} 

//Now names list contains all Name Object 
1

...ここ

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.List; 
import java.util.stream.Stream; 
import java.util.stream.Collectors; 

public class Demo { 
    public static void main(String[] args) throws IOException { 

     final String filename = "whatever"; 

     List<Name> list = 
      Files.lines(Paths.get(filename)) // Strings, lines in the file 
      .map(line -> line.split(","))  // String[], split by , 
      .map(split -> split[1] + split[0]) // String, joined again 
      .map(Name::new)     // Name, make a Name object from String 
      .collect(Collectors.toList());  // collect into a List<Name 
    } 

    public static class Name { 
     private final String studentName; 
     public Name(String studentName) { 
      this.studentName = studentName; 
     } 
     public String getstudentName() { 
      return studentName; 
     } 
    } 
} 
関連する問題