문제상황
Scanner로 사용자로부터 문자열을 입력받아 점(.)을 기준으로 split() 하려고 실행하니 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 런타임에러가 발생했다.
| 12
 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);
 }
 
 | 
| 12
 
 | 12.123Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
 
 | 
해결
- split(".")에서- split("\\.")으로 변경해준다.
| 12
 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()를 사용할 때,- 점(.)이 정규식으로 적용되어 모든 문자를 “”으로 만들어 버린다.
- 점(.)을- 점(.)그대로 인식시키기 위해서는- \.로 해줘야 한다.
- 하지만 \또한 예약어이기 때문에\\로 표시해줘야 한다.
- 따라서 \\.을 입력해줘야 원하는.을 출력할 수 있다.

참고