2014-11-20 3 views
0

split() 메서드를 사용하여 문자열과 정수를 배열에서 분리하려고 시도했지만 작동하지 않습니다.배열에서 split() 분리 문자열 및 삽입 사용

나는 surname = list[1];라고하는 7 행의 인덱스 오브 바운드 예외를 얻었으며 그 이유는 무엇인지 모르십니까?

내가하고자하는 것은 각 요소를 나눠서 정수의 평균을 구하는 것이므로 파일의 첫 번째 텍스트 줄은 Mildred Bush 45 65 45 67 65와 내가 쓰는 새 텍스트 줄을 읽습니다. 새로운 파일은 Bush, Mildred : Final score는 x.xx입니다.

나는 이것을 오랫동안 시도해 왔지만 지금은 제대로 작동하지 않을 수 있습니다.

내 코드 : 그것은 Genio을 말한다

public static void splitTest() 
{ 
String forename, surname, tempStr, InputFileName, OutputFileName, nextLine; 
    int sum = 0; 
    float average; 
    //forename = "Mildred"; 
    //surname = "Bush"; 
    nextLine = ""; 
    tempStr = ""; 

    String[] list = tempStr.split(" "); 
    String[] list = new String[12]; 
    forename = list[0]; 
    surname = list[1]; 
    int[] scores = new int[5]; 
    scores[0] = Integer.parseInt(list[2]); 
    scores[1] = Integer.parseInt(list[3]); 
    scores[2] = Integer.parseInt(list[4]); 
    scores[3] = Integer.parseInt(list[5]); 
    scores[4] = Integer.parseInt(list[6]); 

    FileReader fileReader = null; 
    BufferedReader bufferedReader = null; 
    FileOutputStream outputStream = null; 
    PrintWriter printWriter = null; 
    clrscr(); 

    // Prompt user for input filename 
    System.out.println("Please enter the name of the file that is to be READ (e.g. details.txt) : "); 
    InputFileName = Genio.getString(); 

    // Prompt user for output filename 
    System.out.println("Please enter the name of the file that is to be WRITTEN TO (e.g. newDetails.txt) : "); 
    OutputFileName = Genio.getString(); 
    try { 
     // Open input file 
     fileReader = new FileReader(InputFileName); 
     bufferedReader = new BufferedReader(fileReader); 

     // Open output file 
     outputStream = new FileOutputStream(OutputFileName); 
     printWriter = new PrintWriter(outputStream); 

     // Read a line 
     tempStr = bufferedReader.readLine(); 

     // While there are lines in the input file 
     while (tempStr != null) { 
      String[] list; 
      list = tempStr.split(" "); 
      surname = list[0]; 
      forename = list[1]; 
      int[] scores = new int[5]; 
      scores[0] = Integer.parseInt(list[2]); 
      scores[1] = Integer.parseInt(list[3]); 
      scores[2] = Integer.parseInt(list[4]); 
      scores[3] = Integer.parseInt(list[5]); 
      scores[4] = Integer.parseInt(list[6]); 

      for(int i=0; i < scores.length; i++){ 
       sum = sum + scores[i]; 

       average = (float)sum/scores.length; 
       // Print it to screen 
       System.out.println(tempStr); 

       // Write it to the output file + a new-line 
       printWriter.write(tempStr +"\n"); 

       // Read a line 
       tempStr = bufferedReader.readLine(); 

       System.out.println("\n\nYOUR NEW FILE DATA IS DISPLAYED ABOVE!\n\n"); 
       pressKey(); 

       // Close the input file 
       bufferedReader.close(); 

       // Close the output file 
       printWriter.close(); 
      } 
     } 

, 사용자 입력을 다루는이 클래스. 고맙습니다!

답변

3

귀하의 문제는

String[] list = tempStr.split(" "); 

String[] list = tempStr.split(" "); 
String[] list = new String[12]; 

변경 당신이 고통을 분할하고 당신이 String[] list = new String[12];을 수행 할 때 다음의 값을 덮어 쓰기 한 다음은 String[] list = new String[12];

을 제거하다 배열!

또한

while (tempStr != null) { 

무한 루프이다. 당신은 그 문제를 해결해야합니다 ..

의견 tempStr = "";에 게시대로 당신이 그것을 분할 선택할 때이 당신에게 당신이 tempStr = "Mildred Bush 45 65 45 67 65";


편집으로 변경한다 길이 1의 문자열 줄 것이다 :

public static void main(String [] args){ 
    String forename, surname, tempStr, InputFileName, OutputFileName, nextLine; 
    int sum = 0; 
    float average; 
    nextLine = ""; 
    tempStr = "Mildred Bush 45 65 45 67 65"; 

    String[] list = tempStr.split(" "); 
    forename = list[0]; 
    surname = list[1]; 
    int[] scores = new int[5]; 
    scores[0] = Integer.parseInt(list[2]); 
    scores[1] = Integer.parseInt(list[3]); 
    scores[2] = Integer.parseInt(list[4]); 
    scores[3] = Integer.parseInt(list[5]); 
    scores[4] = Integer.parseInt(list[6]); 
    System.out.println("Forename : "+ forename); 
    System.out.println("Surname : "+ surname); 
    System.out.print("Scores : "); 
    for(int eachInt : scores){ 
     sum+=eachInt; 
     System.out.print(eachInt+" "); 
    } 
    System.out.println(); 
    System.out.println("Average : " + sum/scores.length); 
} 

출력 :

tempStr가 선언되기 때문에
Forename : Mildred 
Surname : Bush 
Scores : 45 65 45 67 65 
Average : 57 
+0

가 작동하지 않습니다 빈 문자열 따라서 공간에 의해 분할되는 경우 결과 배열의 길이는 1입니다. –

+0

@ La-comadreja 나는 그것이 실제로는 문제가 아닌 것을 묘사하는 것이라고 가정합니다. – StackFlowed

+0

나는 그것을 시도했다. 그러나 나는 아직도 오류를 얻고있다. 정수를 파싱하는 다른 하나의 작업은 처음이나 while 루프에 있어야합니까? – DarkBlueMullet