문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
import java.util.*;
class Solution {
public boolean solution(String s) {
if (s.length() == 4 || s.length() == 6) return s.matches("(^[0-9]*$)");
return false;
}
}
위의 코드를 보고 충격받아서 정규표현식을 공부해보기로 했다..... 아래는 내가 푼 코드...
class Solution {
public boolean solution(String s) {
boolean answer = true;
char strToChar[] = s.toCharArray();
int[] intArr = {1,2,3,4,5,6,7,8,9};
if (s.length() == 4 || s.length() == 6) {
for (int i = 0; i < s.length(); i++) {
if(!Character.isDigit(strToChar[i])){
answer = false;
}
}
} else {
answer = false;
}
return answer;
}
}
"특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어"
정규 표현식 | 의미 |
---|---|
^[0-9]*$ == \d | 숫자 |
^[a-zA-Z]*$ | 알파벳 |
^[가-힣]*$ | 한글 |
^[a-zA-Z0-9] | 알파벳이나 숫자 |
^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-z]+$ | 이메일(Email) |
\w+@\w+.\w+(\.\w+)? | 이메일(Email) |
public static boolean matches(String regex, CharSequence input) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
return m.matches();
}
/**
* Creates a matcher that will match the given input against this pattern.
*
* @param input
* The character sequence to be matched
*
* @return A new matcher for this pattern
*/
public Matcher matcher(CharSequence input) {
if (!compiled) {
synchronized(this) {
if (!compiled)
compile();
}
}
Matcher m = new Matcher(this, input);
return m;
}
// 01(0|1)-\d{3,4}-\d{4}
//010 또는 011 "-" 숫자가 3자리 혹은 4자리 "-" 숫자 4자리
@Test
public void example(){
String pattern = "01(0|1)-\\d{3,4}-\\d{4}";
assertTrue("010-8282-1234".matches(pattern));
assertTrue("010-828-1234".matches(pattern));
assertFalse("011-12-1234".matches(pattern));
}