본문 바로가기
Java

2022-09-30 자바(숫자만 뽑은 후 더하기)

by allwing12 2022. 9. 30.
class Main {
  public static void main(String[] args) {
    String line = "aa 11 bb 22 cc 33 dd 44";
        System.out.println(solution1(line));
  }

    static int solution1 (String s) {
        int sum = 0;
        String[] strArr = s.split(" ");
        for(int i = 0; i < strArr.length; i++) {
            if (strArr[i].matches("\\d+")) {
                sum += Integer.parseInt(strArr[i]);
            }
        }
        return sum;
    }
}

 

위의 코드는 String line 변수에 들어간 값에서 숫자만 뽑아서 그 숫자들을 전부 더하는 코드이다.

여기에서 중요한건 matches("\\d+") 라는 코드가 제일 중요하다.

matches는 String 타입으로 선언한 변수여도 변수에 들어간 값이 문자인지 숫자인지 구분을 해준다.

에를 들어서

class Main {
  public static void main(String[] args) {
    String a = "10";
      if(a.matches("\\d+")) {
          System.out.println("정수이다");
      } else {
          System.out.println("정수가 아니다.");
      }
  }
}

 

위의 코드가 있을 때 위의 코드의 결과는 "정수이다" 라는게 나오게 된다.

String a 라는 변수에 들어간 리터럴은 10 인데 이 10 이 int 타입의 정수 10이 아닌 String 타입의 문자 10 이지만

matches 라는 것이 문자 10을 int 타입처럼 확인을 하게 해준다.

그렇기 때문에 이 matches 라는 것을 통해서 String line 에 들어간 값 중 숫자만 뽑아서 더해서 출력할 수 있다.

 

class Main {
  public static void main(String[] args) {
    String line = "aa 11 bb 22 cc 33 dd 44";
        System.out.println(solution1(line));
  }

    static int solution1 (String s) {
        int sum = 0;
        String[] strArr = s.split(" ");
        for(int i = 0; i < strArr.length; i++) {
            if (strArr[i].matches("\\d+")) {
                sum += Integer.parseInt(strArr[i]);
            }
        }
        return sum;
    }
}

 

다시 돌아와서 위의 코드를 봤을 때 solution1 을 하나 만들어주고 int sum 으로 모든 값을 더할 변수 하나 선언해준 후

String 타입으로 배열을 하나 만들어주는데 s.split(" ") 으로 빈칸을 하나 주고 뽑는다.

그리고 for문을 통해서 strArr.length 만큼 for문을 돌리는데 if 문안에 matches를 통해서 strArr[i] 에 정수 값이

들어가게 된다면 아까 만든 값이 없는 변수인 sum에다가 그 값을 더하는데 아직 String 타입이니까 그걸

Integer.parseInt(strArr[i]) 를 통해서 String 타입을 int 타입으로 변환해서 sum에다가 더한다 라는 뜻이다.

 

그렇게 하면 String line 에 있는 숫자 값인 11 , 22 , 33 , 44 가 더한 값이 출력이 되게 된다.

 

 

 

댓글