2013-11-04 30 views
0

對於我的第一階段,我試圖從文本文件中讀取比賽結果。如果每行都有完全相同的格式,則不會有問題。造成這種困難的部分是學校名稱。以下是文本文件中的一行示例。從Java中的文本文件中讀取比賽結果

1 262 Jackson Bertoli (12) Terre Haute South 15:29.1 4:59 

每所學校的名稱可能有1,2或3個單詞。所以我試圖在學校名稱後面尋找一個整數(時間),並停止搜索學校名稱中的單詞。但是我在從reader.next()獲取我的值時遇到問題;並將其插入到從整數中評估字符串的代碼部分,因爲一個使用void而另一個使用static。另外它在整個代碼中都無法識別我的變量schoolnext和schoolnext2。

這很長,但這是我的第一個大男孩計劃,我非常感謝一些幫助,或者我應該嘗試不同的方法。在此之前感謝您花時間瀏覽它!

/* Original program done by Donald Bough started 11/01/13 
    * Cross Country results experimenter! 
    * Put your results from indianarunner.com in a .txt file, plug them into the program,  and 
* you should "eventually be able to" modify your own time or others in the text file 
* to see how it would've affected team places and points. 
* 
* As of 11/04/13 I'm stuck figuring out how to tell, when scanning the text file, how many words make 
* up the school name, then printing off the rest of the results according to that number. This is the 
* beginning phase where I'm just trying to re-print off what the results already have basically. 
* Once I figure this out, I plan on taking those variables and actually doing the math with it. 
*/ 

import java.lang.*; 
import java.io.*; 
import java.util.*; 

public class myreadfile { 
    //Setting up my variables 
    int setschool = 0; 
    int setschool2 = 0; 
    String schoolnext; 
    String schoolnext2; 
    private Scanner reader; 


    //Opening my text file with the race results. This part works 100% 
    public void openfile(){ 
     try{ 
      reader = new Scanner(new File("C:\\Donalds\\Java\\Partsemistateresults.txt")); 
     } 
     catch (Exception e){ 
      System.out.println("This file does not exist"); 
     } 
    } 



    // Taking care of the first line of words we don't want to deal with. This also works 100% 
     public void firstline(){ 

       String a = reader.next(); 
       String b = reader.next(); 
       String c = reader.next(); 
       String d = reader.next(); 
       String e = reader.next(); 
       String f = reader.next(); 
       String g = reader.next(); 


      System.out.printf("%s %s %s %s %s %s %s" , a , b, c , d ,e , f, g); 
     } 


    //tells if a string is an integer. Everything from now on gets uncertain and sticky. 

     public static boolean isInteger(String schoolnext) { 
     try { 
      Integer.parseInt(schoolnext); 
     } catch(NumberFormatException e) { 
      // This isn't an integer, so the number 2 is telling us we have a string 
      //I want to move onto the next word since it's another name in the 
      //school. Now go back down to the readfile method. 
      int setschool=+2; 
      return false; 
     } 
     //Is an integer. We now know schoolnext took the value of an integer. This 
     //integer would be the time part of the race results. Signal to move past 
     //the attempt in finding school names. Now go back down to the readfile method. 
     int setschool =+1; 
     return true; 
    } 



    //This is where the program goes after deciding we had another word in the school na,e/ 
    public static boolean isInteger2(String schoolnext2) { 
     try { 
      Integer.parseInt(schoolnext2); 
     } catch(NumberFormatException e) { 
      //schoolnext2 turns out to be a string, that's three school word names. DONE 
      int setschool2=+2; 
      return false; 
     } 
     //schoolnext2 turns out to be an integer, we're done. schoolnext2 value is the time value 
     int setschool2 =+1; 
     return true; 
    } 



    // Meat of the code, goes through all the lines 
    public void readfile(){ 
     while(reader.hasNext()){ 
      //These are going to always be in this order, makes it do-able and simple. 
      String place = reader.next(); 
      String bib = reader.next(); 
      String firstname = reader.next(); 
      String lastname = reader.next(); 
      String grade = reader.next(); 
      String school = reader.next() ; 
      String schoolnext = reader.next(); 


     /* *** Here is where I have trouble. All the schools have a different amount of words 
      in their school name. You will now see my attempt at telling when the next part of the 
      race results line is part of the school name or the time ***    */ 


      // If setschool== 1, it is an integer. Making schoolnext in this case our time string 
      //from the race results. Then we print the rest off. 
         if (setschool == 1) { 
          String pace = reader.next(); 
          System.out.printf("%s %s %s %s %s %s %s %s\n" , place, bib, firstname, 
          lastname, grade, school, schoolnext, pace); 
         } 

      // If setschool was == 2, the next word isn't an integer, its another school name. 
      // So we continue on with trying to find if the next string is the race results time 
      //or another school name 
      if (setschool == 2){ 
       String schoolnext2 = reader.next(); 





       //The most words a school has is 3, so once we know the third string is also a word, 
       //we can can print off the 3 school strings which are representing each word of the 
       //school. 
       if(setschool2 == 2){ 
        String time = reader.next(); 
        String pace = reader.next(); 
        System.out.printf("%s %s %s %s %s %s %s %s %s %s\n" , place, bib, firstname, 
        lastname, grade, school, schoolnext, schoolnext2, time, pace); 
       } 

       //The third word was an integer, our time from the race results. So now we print off 
       //the two other Strings and realize schoolnext2 took on the schoolnext2 value 
       if(setschool2 == 1){ 
        String pace = reader.next(); 
        System.out.printf("%s %s %s %s %s %s %s %s %s\n" , place, bib, firstname, lastname, 
        grade, school, schoolnext, schoolnext2, pace); 
       } 


      } 







     } 
    } 


    //Closing the file for good programming 
    public void closefile(){ 
     reader.close(); 
    } 
} 

回答

0

方法reader.nextInt()怎麼辦?它掃描時發現下一個整數。

+0

這會讓我的生活變得更輕鬆我想。這會跳過「單詞」字符串並直接進入下一個整數嗎? –

+0

是的,它會在跳過其他所有內容時找到整數。 [Java 7中的掃描器對象](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html) –