728x90
🟦 JAVA | 구분자 여러개일 때, 정규식으로 뽑는 방식
1) split()에 정규 표현식으로 구분자 여러개 담아서 자르기
- 주의할 점 : 온점(.) , (+)은 정규식에서 특별한 의미를 지니기 때문에, 단순한 문자로 인식시키기 위해서는 \\를 앞에 붙여야 한다.
String str = "a.b,c+d";
String[] tmp = str.split("\\\\.|,|\\\\+");
\\\\는 단순 문자열로 인식하라고 붙였고,
| 는 or의 의미이다. 여기서 . 또는 , 또는 + 모두 구분자로 인식하겠다 의미.
str.split("@|#|%");
정규식에서 '|' 기호는 or 연산을 수행합니다.
'@' 또는 '#' 또는 '%' 기호를 구분자로 하여 문자열을 잘라줍니다.
2) StringTokenizer 클래스 사용
- 이 클래스는 문자열을 구분자 기준으로 자른다.
⬛ name@domain.탑도메인 형식으로 된 문자열 개수 | 풀이
(1) 소문자 . 소문자 @ 소문자 : 이런 형식이 있을 수도 있다.
(2) 소문자. 소문자 . @소문자. 소문자 : 이런 형식도 있을 수 있다.
🔵풀이 방식
- 우선 @ 를 기준으로 자르고 그 크기가 2를 넘어가면 continue;
- 크기가 2를 넘어가지 않는다면 tmp[0] 는 name 이 되고 tmp[1] 은 도메인 묶음이 된다.
- 도메인 묶음을 다시 판별할 함수를 만든다.
-(1) 그 함수 내부에서는 (.) 을 기준으로 문자를 잘라서 크기 2인 경우에 한해서 처리
-(2) 크기 2인 경우 tmp[0] 은 소문자인지 확인, tmp[1]은 조건에 맞는 com, net, org 중에 하나에 해당하는지 확인하여 맞으면 true 리턴
//오답노트- 구분자로 여러 구분자 자르기
public class Main {
//소문자로 된 인지
static boolean isName(String name) {
char[] tmp = name.toCharArray();
for(int i=0; i<tmp.length; i++) {
if(!Character.isLowerCase(tmp[i])) { //하나라도 아닌 게 나오면
return false; //거짓
}
}
return true; //다 통과하면 진실
}
//뒷 도메인 처리
static boolean isDomain(String domain) {
String[] a = domain.split("\\\\.");// . 을 기준으로 자르고
if(a.length == 2) { //두개로 나뉘는 경우에 한해서
String dm = a[0]; // 얘는 소문자인지 봐야 하고
String td = a[1]; // 얘는 해당되는 애인지만 봐야 하고
if(isName(dm) == true) {
if(td.equals("com") || td.equals("net") || td.equals("arg")) {
return true;
}
}
}
return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] arr = {"abdxdfc.brmde@net", "abc@br.com" , "abdx.dfc@brm@e.net", "abdxdfc@brm@com.net","woeiq@dalge.com", "abdxdfc.brmde@net"};
int answer =0;
for(String x : arr) {
String[] tmp = x.split("@");//일단 골뱅이 기준으로 잘라
if(tmp.length == 2) { //이 경우에 한해서만
String name = tmp[0]; //앞부분
String domain = tmp[1];//얘를 따로 처리
if(isName(name) == true && isDomain(domain) == true) {
answer++;
}
}else continue;//그 외는 제낌
}
//정답 출력
System.out.println(answer);
}
}
728x90
'코딩 테스트 [준비] > JAVA | 활용할 문법 정리' 카테고리의 다른 글
JAVA | HashMap에서 ConcurrentModificationException 발생 시[해결] (0) | 2023.10.18 |
---|---|
JAVA | Deque - Double-ended-queue (덱/데크) 사용법 (0) | 2023.08.14 |
JAVA | 알파벳, 대/소문자 확인하는 방법 | isUpperCase(), isLowerCase(), isAlphabetic() (0) | 2023.07.21 |
JAVA | 사용자 정의 객체 정렬 - String 타입의 사전 순 정렬 (0) | 2023.07.21 |
JAVA | 사용자 정의 객체 정렬 | Comparable<객체> (0) | 2023.07.05 |