2016-09-08 4 views
1

私はUniの生徒を勉強していますので、この問題を解決するためにあなたの助けが必要です。 私はUG_StudentとGradStudentのstudent.txtファイルに以下のデータがあります。javaを使用してデータの混合を含むテキストファイルから値を区切ります。

Jane Jones;111999;11 First St, Unitown,2999;0401 444 444;4483;4;6;7 
Peter Smith;111998;22 Second St, West,5999;999 777;B Sc;2000;4672;5;5;5 
Jim Smith;111988;25 Third St, South,6001;0412 222 333;BESE;1998;4672;4;5;5 
John William;334344;123 Fig St, Townville,5655;0404 333 333;4333;5;6;5 

最初と最後の行は、この順序でデータを持っていると示しUG_Student:

Name;StudentID;Address; ContactNo;SubjectNo;Test1;Test2;Test3 

第二、第三行目は、この順序でデータを持っていると示しGradStudent:

Name;StudentID;Address; ContactNo;PreviousDegree;GradYr;SubjectNo;Test1;Test2;Test3 

I txtファイルにUG_StudentまたはGradStudentのいずれかが含まれている場合にのみ、JTextareaで読み取りおよび印刷できる次のコードがあります。

public void openFile() 
    { 
     try 
     { 
      input = new Scanner(new File("student.txt")); 
      input.useDelimiter(";"); 
     } 
     catch (FileNotFoundException fileNotFoundException) 
     { 
      System.err.println("Error opening file."); 
      System.exit(1); 
     } 
    } 

    public String readFile() 
    { 
     Student ugStudent = new UGstudents(); 
     Student gradStudent = new Gradstudents(); 

     //int lineNumber = 1; 

     //System.out.printf("running..."); 

     try 
     { 
      while (input.hasNext()) 
      {  
       String name = ugStudent.name = input.next(); 
       int studentID = ugStudent.studentID = input.nextInt(); 
       String address = ugStudent.address = input.next(); 
       int contactNo = ugStudent.contactNo = input.nextInt(); 
       int subjectNo = ugStudent.subjectNo = input.nextInt() ; 
       int test1 = ugStudent.test1 = input.nextInt(); 
       int test2= ugStudent.test2 = input.nextInt(); 
       int test3= ugStudent.test3 = input.nextInt(); 
       String checkGrade= ugStudent.checkGrade(); 

       //System.out.println(name + studentID + address + contactNo + subjectNo + test1 + test2 + test3 + checkGrade); 
       resultColumn = ("Name\t Student Id\t Address\t\t Contact No\t Subject No\t Test 1\t Test 2\t Test 3\t Grade\n--------------------------------------------------------------------------------------------------------------------\n"); 
       result+=(name+ "\t" + studentID + "\t " + address + "\t " + contactNo + "\t " + subjectNo + " \t" + test1 + "\t " + test2 + "\t " + test3 + "\t " + checkGrade); 

      }    
     } 
     catch (NoSuchElementException elementException) 
     { 
      System.err.println("File improperly formed."); 
      input.close(); 
      System.exit(1); 
     } 
     catch (IllegalStateException stateException) 
     { 
      System.err.println("Error reading from file."); 
      System.exit(1); 
     } 
     return resultColumn +result; 
    } 

    public void closeFile() 

    { 

     if (input != null) 

     input.close(); 

    } 
} 

ただし、指定されたテキストファイルには、上記のようなデータの混合が含まれている必要があります。私の質問は、そのテキストファイルからUG_StudentまたはGradStudentデータだけを読み込んで印刷する方法です。長い質問を申し訳ありませんが、これは私ができる最高です。

+0

http://stackoverflow.com/questions/3481828/how-to-split-a-string-in-java – svarog

+0

タグを慎重に選択してください。アプリの場合でも。 GUIを持っていれば、コードスニペットは、実際の問題にSwingと何も関係がないことを示唆しています。 –

+0

訂正していただきありがとうございます。 –

答えて

0

正規表現を使用することをお勧めします。それぞれの行の種類ごとに式を持ち、それぞれの行を一致させ、適用しない行をスキップすることができます。例えば:

Pattern undergrad = Pattern.compile("(\\w*) (\\w*);(\\d*); ..."); 
Matcher matcher = undergrad.match(line); 
if (matcher.matches()) { 
    String firstName = matcher.group(1); 
    String secondName = Matcher.group(2); 
    String studentNumber = Matcher.group(3); 
    ... 
} 

正規表現を使用することの利点は、行に一致し、1つの命令で抽出する値を識別していることです。それらの使用の詳細については、Patternを参照してください。

+0

迅速な対応をありがとう。私はそれを試してみる。 –

関連する問題