희자님
20
2017-09-14 01:38:31.0
2
176

자바 관련 질문입니다 ! (초보주의) ㅠㅠ


System.out.println(str[1]);이 출력이 안되서 질문드려요

str[0]은 옳게 나오는데 1,2,3 인덱스는 아예 출력이 안되고 에러가 나네요..

이해가 안가는데 for안에 넣고 i로 돌리면 나와요..이유가 너무 궁금합니다 ㅠ

File file=new File("./src/java0913_collection/prob/booklist.txt");

try {

Scanner sc=new Scanner(file);

LinkedList<String> nStack=new LinkedList<String>();

String[] str=null;

while(sc.hasNextLine())

{

nStack.push(sc.nextLine());

}

System.out.print("title              publisher   writer     price");

while(!nStack.isEmpty())

{

String s=nStack.pop();

str=s.split("/");

System.out.println(str[1]);


}

} catch (FileNotFoundException e) {

e.printStackTrace();

}

0
0
  • 답변 2

  • hk
    657
    2017-09-14 06:34:36.0 작성 2017-09-14 06:38:27.0 수정됨

    str = s.split("/")


    에서 s 를 split 한 결과가 하나밖에 없는거 아닌가요

    for .. i 로 print(str[i]) 로 돌리면 배열 크기만큼만 도니까 0 까지만 출력되고 끝나고,

    위에 print(str[1]) 은 없는 배열 위치를 호출하니 array index exception 날 것 같네요

    str.length 를 찍어서 배열 크기를 한번 확인해보세요.


    그리고 배열 선언이 왜 while 문 밖에서 이뤄지는지 모르겠네요.

    어차피 while 문 안에서만 사용되는데

    0
  • 하비
    233
    2017-09-14 10:39:16.0

    해결방식은 두 가지입니다.

    1. while(sc.hasNextLine())

    여기서 while문을 돌릴때 hasNextLine()로 라인 자체를 받으시는데요.

    처음부터 sc.next()로 쭉 받으셔서 str에 넣으시면 훨씬 코드가 줄어들게 됩니다.

    2. s.split("\\s+");

    공백이 여러개 있을 경우 위와같이 정규표현식을 사용하면 원하는 데로 문자열만 배열에 들어갑니다.






    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.