공부/오늘 배운것

22.11.15.Tue - 정규 표현식 , 배열 복사

Doil98 2022. 11. 15. 17:24

오전 :

INDEX

  • 정규표현식
  • 배열 복사
  • 베열 항목 비교

정규표현식

대괄호는 하나의 문자로 처리한다.

문자열 안에 대괄호 안에 정규식을 작성할 수 있다.
리턴 값은 논리 결과 값이 나온다. ( true , false )

활용

조건이 까다로울순 있지만 , 활용을 잘 하면 , 가능성이 뛰어나다.
어휘 검색 등.

[] 와 기호 조건을 사용하면 더 많은 경우의 조건을 작성 가능.

기호

  • -
    • 범위를 지정함
  • ^
    • Not 의미
  • \d
    • 숫자 이면 참
  • \D
    • 숫자가 아닌 글자
  • \w
    • 0 - 9 , a - z ,A -Z 는 True. 이외의 기호들은 False.
  • ?
    • 바로 앞의 문자에 대해 0 개 또는 1개
  • +
    • 바로 앞의 문자에 대해 1개 또는 n개
  • *
    • 바로 앞의 문자에 대해 0개 또는 n개
  • .
    • 문자 . 문자
    • 문자사이에 어떤 글자든지 참으로 반환.
    • [.] 혹은 \. 을 쓰면 문자 사이에 . 만 ture로 반환.
  • {조건1, 조건2}
    • 바로 앞의 문자에 대해 조건1 부터 조건2 의 개수 안에 들어가면 true.
    • 앞의 문자는 () 소괄호로 묶으면 하나로 처리가 되 잘 파악을 해주자.

괄호 사이 - 는 범위를 나타내며, 대 소문자를 구분할 수 있다.
^ ( 꺽쇠 ) 는 not의 의미다. ( 이 조건이 아니면 참이다. )

String Exam1 = " [a - z ] " ; // 소문자 a 부터 z 는 모두 true 반환
String Exam2 = " [ A - Z ] "; // 대문자 A 부터 Z  참

String Exam3 = " ab[abcd] 기호 " ; // True조건 : ab는 무조건 있어야 하며 뒤의 기호의 조건에 따라 대괄호의 문자를 맞게 작성한다.

// 기호에는 w , ? , + , * 가 있다.

예제

import java.util.Scanner;
import java.util.regex.Pattern;

public class RegExpPatternExam {
    public static void main(String[] args) {
/*        
        String regExp = "ab[abcd]?";
        System.out.println( Pattern.matches(regExp, "abe") );
*/
        String regExp = "(02|010)-\\d{3,4}-\\d{4}" ; // | 는 or 표현 
        // 02로 시작하거나 010으로 시작하고 - 가 있고, 숫자가 3자 또는 4자 다음 - 다음 숫자 4자가 오는 검증 구문.
        String data = "02-1234-5678"; // 참이지만 010 일때 4자라는 조건이 필요.
        if ( Pattern.matches(regExp, data)) {
            System.out.println("입력 번호가 규칙에 맞습니다.");
        }else {
            System.out.println("입력 번호가 규칙에 맞지 않습니다. ");
        }

        // 이메일 테스트
        String emailRegExp = "\\w{4,30}@\\w+\\.(\\w+)?";
        String emailData = "justdoil98gmail.com";
        @SuppressWarnings("resource")
        Scanner scan = new Scanner(System.in);
        while(!Pattern.matches(emailRegExp, emailData) ) {
            System.out.println("규칙에 맞지 않는 이메일 작성했습니다.");
            emailData = scan.next();
        }
    }
}

배열 복사

예제

import java.util.Arrays;

public class ArraysCopyExam01 {
// 배열 복사 
    public static void main(String[] args) {
        //3가지 존재
        char[] arr1 = {'J','A','V','A','1','2','3'};

          //배열의 복사는 Arrays클래스와 System클래스에서 제공되는 메서드를 이용할 수 있다.
        char[] copyArr = new char[arr1.length+4];
        System.arraycopy(arr1, 0, copyArr, 0, arr1.length);
        System.out.println(arr1);
        System.out.println(copyArr);

        // Arrays.copyof
        char[] copyofArr2 = Arrays.copyOf(arr1, arr1.length);
        System.out.println(copyofArr2);

        // Arrays.copyofRange 메서
        char[] corArr3 = Arrays.copyOfRange(arr1, 0, arr1.length);
        System.out.println(corArr3);
    }
}

N차원 배열 비교

일차원 배열의 경우는 배열을 복사해서 사용하는데 무리가 없다.
이차원 이상의 배열일 경우 반드시 깊은 복사를 ( 직접 구현) 해야 하고,
같은지 판단하기 위해서는 Arrays.deepEquals 사용

예제

배열 정렬


형식 지정자

형식을 부여, 조건에 맞게 출력 가능.

종류

  • %d
  • 다양한 지정자가 있다.
// 시간 지정자.
import java.util.Date;

public class DateFormat {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println(now);
        System.out.printf
        (" %1$ty년 %1$tm월 %1$td일" , now    );
    }
}


점심 : 야무지게 먹어야징

오후 :

INDEX

  • thread

Thread

하나의 코드 실행 흐름.

멀티쓰레드 :
스레드들이 동시에 여러개 실행될 수 있다. ( 그런 것 처럼 보이다.)

main -> 하나의 쓰레드이다.