2

오류 자체가 실제로 문제가 어디에 있는지, D2.main (D2.java:19) 또는 19 행에 있음을 알 수 있습니다. 정확히 무엇이 문제인지 파악할 수 없습니다. 파일의 모든 정보를 멋진 형식으로 출력하기 위해 split (":")을 사용하여 파일을 반복하려고합니다. 나머지 정보를 얻는 것이 사회 보장 번호를 얻는 것이 문제가되지는 않지만 상당히 골치 아픈 일입니다. 아래 내 코드 및 모든 포인터 또는 도움이 될 매우 감사하겠습니다! 이 시간에 더 많은 시간을 일하면서 ID를 인정하고 바보처럼 보이는 두 번째 눈 쌍이 나올 수 있다는 것을 알았습니다. 나중에 깨닫지 못해서 바보가 될 수 있습니다. 고맙습니다!Java.Lang.StringIndexOutOfBoundsException : 문자열 인덱스가 범위를 벗어났습니다 : 5

import java.util.Scanner; 
import java.io.*; 
public class D2 
{ 
    public static void main(String[] args)throws FileNotFoundException 
    { 
    String categories, sections[]; 
    int x; 
    Scanner reader = new Scanner(new FileReader(args[0])); 
    PrintWriter outputfile = new PrintWriter(args[1]); 

    while(reader.hasNext()) 
    { 
     categories = reader.nextLine(); 
     sections = categories.split(":"); 
     String social = sections[3]; 
     String k, l, p; 
    k = social.substring(0,3); 
    l = social.substring(3,5); 
    p = social.substring(5); 

    String ssn = k + "-" + l + "-" + p; 
    String top = ("Student Name      SSN       DOB    CURR     GRAD YR"); 
    String middle = ("------------      ---       ---    ----     -------"); 
    String bottom = (sections[0] + "      " + ssn + " " + sections[4] + "    " + sections[1] + "  " + sections[2]); 

    outputfile.println(top + "\n" + middle + "\n" + bottom); 

    outputfile.close(); 
    reader.close(); 
    } 
} 
} 

존 존스 : 987-65-4321 : 1956년 3월 12일 : ELT : 2005 필라델피아 존스 : 876-54-3219 : 1989년 12월 15일 : CIS : 2003 윌리엄 스위니 : 768- 45-2768 : 01-03-1990 : MAS : 2006 Terry Hundred : 734-85-9437 : 04-15-1965 : BAD : 2001 Susan Pine : 489-37-2637 : 08-08-1988 : INS : 2007

위의 내용은 읽으려고하는 텍스트 파일이며 출력 파일의 이름은 중요하지 않습니다. 내가 배열에 액세스 할 때 잘못된 인덱스를 사용하는 생각

String social = sections[3]; //equals ELT 
+0

java.lang.StringIndexOutOfBoundsException : 문자열 색인이 범위를 벗어 : D2.main (D2.java:19) –

+0

위의 \t 오류 –

답변

0

는이 오류가 발생합니다. categories.split(":")을 사용하면 배열이 만들어집니다. 이 배열에서 네 번째 항목 sections[3] (인덱스가 0부터 시작하기 때문에)에는 첫 번째 반복에서 "ELT"이 포함됩니다. ELT는 3 글자 밖에 없으므로 하위 문자열로 색인 5에 액세스하려고하면 예외가 발생합니다.

그리고 한 가지 더 : 반복적으로 readeroutfile을 닫고 싶지 않을 수도 있습니다. 이렇게하면 첫 번째 행만 기록되고 두 번째 반복에서는 예외가 발생합니다.

+0

감사하다 java.lang.String.substring (알 수없는 소스)에서 5 \t 당신은 문제의 코드 조각을 보지 못했습니다. 어떻게 문제를 해결할 수 있을까요? 내가 4 이상으로 값을 조정하면 4 경계선 밖에서 같은 오류가 발생하지만 그 선에 대신. –

+0

마지막 코멘트에 Nvm, 나는 그것을 이해했다. 이제 나는 그것을보기 쉽게 만들어야합니다. –