본문 바로가기

트러블 슈팅

JAVA .split error

  • 문제점

https://school.programmers.co.kr/learn/courses/30/lessons/12934 알고리즘 문제 를 푸는 과정에서

.split에 관한 에러가 발생했다.

class Solution {
    public long solution(long n) {
        long answer = 0;
        //n = 121 -> a = 11.0
        double a = Math.sqrt(n); 
        // a-> String b = "11.0"
        String b = Double.toString(a); 
        //c = {"11", "0"}
        String[] c = b.split("."); 
        //c[1] = "0" 이 나와야 하는데
        if(c[1].equals("0")){
            answer = (long)Math.pow(a+1 ,2);
        }else{
            answer = -1;
        }
        return answer;
    }
}

c[1]의 값을 받아오지 못했다.

그래서 for문으로 c의 index값을 확인해 보기로 했다.

class Solution {
    public long solution(long n) {
        long answer = 0;
        double a = Math.sqrt(n); //n = 121 -> a = 11.0
        String b = Double.toString(a); 
        String[] c = b.split("."); 
        //for문으로 c의 인덱스값 확인해 보기
        for(String i:c){
            System.out.println(i);
        }
        return answer;
    }
}

이럴수가... 0이 나왔다... 차라리 null값이 나왔으면 어디서 잘못되었는지 알수라도 있었을텐데..... 방법을 바꿔서 c에 값이 재대로 받아와지는지 확인해 보기로 하고, .split("")로 수정해봤다.

        String[] c = b.split("");
        for(String i:c){
            System.out.println(i);
        }

재대로... 잘 들어오는데 뭐가 문제인지 모르겠다...

  • 해결
class Solution {
    public long solution(long n) {
        long answer = 0;
        double a = Math.sqrt(n);
        String b = Double.toString(a);
        String[] c = b.split("\\.");
        for(String i:c){
            System.out.println(i);
        }
        if(c[1].equals("0")){
            answer = (long)Math.pow(a+1 ,2);
        }else{
            answer = -1;
        }
        return answer;
    }
}

알고보니 .은 \\.으로 표현해 줘야 한다는것을 알았다.... 진짜 사람 애먹게만드는구만...

절대 안까먹을것 같다.