[이슈해결]Exception in thread java.lang.ArrayIndexOutOfBoundsException: 점(.)사용시 에러 해결방법

문제상황

Scanner로 사용자로부터 문자열을 입력받아 점(.)을 기준으로 split() 하려고 실행하니 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 런타임에러가 발생했다.

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String f = sc.next();
String[] ff = f.split(".");
String int1 = ff[0];
String int2 = ff[1];
System.out.println(int1);
System.out.println(int2);
}
  • 콘솔창에 런타임에러발생
1
2
12.123
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0




해결

  • split(".")에서 split("\\.")으로 변경해준다.
1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String f = sc.next();
String[] ff = f.split("\\.");
String int1 = ff[0];
String int2 = ff[1];
System.out.println(int1);
System.out.println(int2);
}




원인

  • 정규표현식에서 점(.)은 임의의 한 문자(종류를 가리지않지만 \는 넣을 수 없음)를 의미한다.
  • split()replace()를 사용할 때, 점(.)이 정규식으로 적용되어 모든 문자를 “”으로 만들어 버린다.
  • 점(.)점(.) 그대로 인식시키기 위해서는 \.로 해줘야 한다.
  • 하지만 \ 또한 예약어이기 때문에 \\로 표시해줘야 한다.
  • 따라서 \\.을 입력해줘야 원하는 .을 출력할 수 있다.

https://skout90.github.io/2017/09/23/Javascript/6.%20javascript-RegExp%EB%82%B4%EC%9E%A5%EA%B0%9D%EC%B2%B4/




참고

Comments