본문 바로가기
Tech/Algorithm

프로그래머스)level.1_문자열 다루기 기본

by 소라소라잉 2019. 4. 3.

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다.

 

제한 사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.

입출력 예

a234 false
1234 true

 

 

 

< 내 풀이 > 

class Solution {
public boolean solution(String s) { char[] chars = s.toCharArray();
boolean answer = true;

if (chars.length == 4 || chars.length == 6) {
for(int i=0; i<chars.length; i++) {
if(chars[i]>=(char)65 && chars[i]<=(char)122) {
answer = false;
break;
}
} 
} 
else answer = false;
System.out.println(answer);

return answer;
}
}

 

< 다른 사람의 풀이 1 > 

class Solution {
public boolean solution(String s) {
if(s.length() == 4 || s.length() == 6){
try{
int x = Integer.parseInt(s);
return true;
} catch(NumberFormatException e){
return false;
}
}
else return false;
}
}

try~catch 이용하여 s를 int형으로 변환시키고 

int형으로 변환될 수 없는 예외(NumberFormatException)가 발생한 경우 false를 return.

 

* NumberFormatException : Integer.parseint()를 사용하여 String -> int 형변환 시 int형으로 변환할 수 없는 String값이 있을 경우

 

 

< 다른 사람의 풀이 2 >

import java.util.*;

class Solution {
public boolean solution(String s) {
if (s.length() == 4 || s.length() == 6) return s.matches("(^[0-9]*$)");
return false;
}
}

* matches() 메소드 

: 문자열에서 특정 문자열이 포함되었는지 검사할 때 유용한 메소드
: matches()에 정의된 정규식일치하면 true, 일치되지 않으면 false를 반환. (boolean 값을 반환. )
: String 클래스의 matches 메소드는 정규식을 만족하는지 확인하는 메소드.

^ : 문자열의 시작
$ : 문자열의 종료
. : 임의의 한 문자 (문자의 종류 가리지 않음)
단, \ 는 넣을 수 없음
* : 앞 문자가 없을 수도 매우 많을 수도(무한) 있음
+ : 앞 문자가 하나 이상
? : 앞 문자가 없거나 하나있음
[] : 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냄
[]내에서 ^가 선행하여 존재하면 not 을 나타냄
{} : 횟수 또는 범위를 나타냄
() : 괄호 안의 문자를 하나의 문자로 인식
| : 패턴 안에서 or 연산을 수행할 때 사용
\s : 공백 문자
\S : 공백 문자가 아닌 나머지 문자
\w : 알파벳이나 숫자
\W : 알파벳이나 숫자를 제외한 문자
\d : 숫자 [0-9]와 동일
\D : 숫자를 제외한 모든 문자
\ : 정규표현식 역슬래시(\)는 확장 문자
역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미
(?i) : 앞 부분에 넣어주면 대소문자를 구분하지 않음

( \ : 역슬래쉬 )

[출처] String 클래스 matches 메소드 예제.1|작성자 Yeriel

 

따라서 풀이의 s.matches("(^[0-9]*$)"); 는

( ) 에 정의된 0부터 9까지의 숫자로만 이루어져 있으면 true. 그 외의 값이 있다면 false를 반환해주는 것 같은데...

이클립스에서 돌려보니 소괄호(())와 문자의 시작과 끝을 나타내는 ^,$는 없어도 잘 돌아가는 것 같다. 

여러가지 예제를 만들어봤는데 생각대로 되지는 않지만 하다보면 알게 되겠지 뭐... 

 

 

 

 

새로 알게된 것

NumberFormatExceptio

- matches()함수  

댓글