study/Java

[sist] 2024.01.12_Java : String(문자열), Regular Expression(정규식), Array(배열)

듀2 2024. 2. 3. 17:42

- 문자열이 비어있는지?

String str = ""; // empty : 문자열 저장소의 주소는 존재하나 안의 값이 없을 때.
String str1 = null; // 참조형 데이터 형의 초기화 값. 객체가 heap의 주소를 참조하지 않았을 때(할당받지 않았을 때)

// "" - str.isEmpty() 비교
if(str.length() == 0){

}

if(str.isEmpty(){
	// 가독성이 더 좋다.
}

// null은 관계연산자로 비교
str == null // str이 객체가 생성되지 않았음을 비교
str != null // str이 객체가 생성되었음을 비교

 

- 문자열의 앞, 뒤 공백 자르기

String str = "   가 나다   ";
String str1 = str.trim();	// "가 나다"

 

- 문자열 치환

String str = "Java Oracle";

String str1 = str.replace("찾을 문자열", "치환할 문자열"); // 정규식을 사용할 수 없고, 문자나 문자열을 치환
String str1 = str.replaceAll("찾을 문자열", "치환할 문자열"); // 정규식을 사용할 수 있다.

String str1 = str.replaceAll("a", "AA"); // "JAAvAA OrAAcle"

String msg = "나 지금 피씨방인데, 넌 어디니 ㅆ ㅣ방새야?";
String filter = msg.replaceAll("씨", "*").replaceAll("방", "*").replaceAll("ㅆ", "*");
// method의 반환형이 참조형이라면 반환 값을 받아서 클래스가 제공하는 method를 연결하여 호출할 수 있다. : method chain

 


* Regular Expression (정규식)

- 문자열 안에서 특정 패턴이나 규칙을 가진 문자열을 검색할 때 사용. (패턴 매칭)

- 짧은 코드로 사용할 수 있다.

- 문자열 처리에 유용한 도구이나, 많이 사용하면 가독성이 떨어질 수 있다.

- java.util.regex.Matcher, Pattern class에서 사용할 수 있고, String에서는 replaceAll()에서 사용할 수 있다.

- 패턴 매칭(문자열 안에 특정 패턴이나 규칙을 가진 문자열을 검색), 문자열 검증(문자열이 특정 규칙을 따르는지 검증), 문자열 추출, 대체(수정)의 일을 할 수 있다.

 

문법)

- 숫자) \\d (\d가 숫자 패턴이지만 자바에서는 \가 특수문자의 시작 문자이므로 \\를 사용한다.)

String msg = "Hello 자바 010-1234-5678 나이는 20살이고 우리집 번지수는 19-1번지";

String str = msg.replaceAll("\\d", "x");
// Hello 자바 xxx-xxxx-xxxx 나이는 xx살이고 우리집 번지수는 xx-x번지

 

- () 그룹, \\d{글자수} - 글자수 일치, \\d(글자수,} - 글자수 이상

 

사용법) (\\d{2}) - 숫자 2개를 그룹

String msg = "내 전화번호는 010-1234-5678입니다. 나이는 20살이고 이전 전화번호는 011-123-4567";

String temp = msg.replaceAll("(\\d{3})-(\\d{4})-(\\d{4})", "x");
// 내 전화번호는 x입니다. 나이는 20살이고 이전 전화번호는 011-123-4567

String temp = msg.replaceAll("(\\d{3})-(\\d{4})-(\\d{4})", "$1-xxxx-$3");
// replaceAll()에서만 제공하는 기능으로, 그룹의 값을 참조할 때 사용. $1 - 그룹1
// 내 전화번호는 010-xxxx-5678입니다. 나이는 20살이고 이전 전화번호는 011-123-4567

String msg = "내 전화번호는 010-1234-5678입니다";

msg.replaceAll("(\\d{3}0)\\d{1}(\\d{3}-\\d{4})", "$1-x-$3");
// 내 전화번호는 010-x234-5678입니다

 

- 문자열) [](문자 class), +(하나 이상)

 [] : 정의되는 문자는 각각을 비교: test => 문자열 안에 't', 'e', 's', 't' 하나를 각각 찾는다. (범위가 아님)

 범위: 소문자 a-z, 대문자 A-Z, 숫자 0-9, 한글 ㄱ-힣, 특수문자는 범위를 설정할 수 없다.

String msg = "hello 내 이메일은 test@sist.com입니다.";

// 대문자, 소문자, 숫자, 특문(._%+-) : [a-zA-Z0-9._%+-]+
// 대문자, 소문자, 숫자, 특문(.0) : [a-zA-Z0-9.-]+
// 영어로만 구성된 2글자 이상 : [a-zA-z]{2,}

String temp = msg.replaceAll("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-z]{2,}", "xxxx@xxxx.xxx");
// 내 이메일은 xxxx@xxxx.xxx입니다

 

- 기본형 데이터 형을 문자열로 저장하기. (입력된 정보를 객체 안의 인스턴스 변수에 저장하지 않기 때문에 static method로 제공)

int i = 10;
String s = String.valueOf(i);

* Array(배열)

- 참조형 데이터 형.

- 일괄 처리 시 사용. (속도 향상)

- 일차원 배열, 이차원 배열, 삼차원 배열, 가변 배열 4가지의 배열을 지원.

- 방으로 구성되고, 모든 방의 데이터 형은 같다.

- 고정 길이형. (크기가 정해지면 프로그램이 실행 중에는 변경되지 않는다.)

 

* 일차원 배열)

- 열로만 구성된 배열.

- 열(방)의 개수를 얻을 때에는 "배열명.length" 사용.

 

사용법) 선언 > 생성 > 값 할당 > 값 사용

 

 

1. 선언)

데이터형[](배열기호) 배열명 = null; // 권장
데이터형 배열명[] = null;

int[] arr = null;

 

2. 생성)

배열명 = new 데이터형[방의 수];	// 설정된 방의 수: 변경X

arr = new int[4];

 

3. 값 할당) - 배열의 인덱스를 사용

배열명[인덱스] = 값;

arr[0] = 2024;
arr[3] = 1;

 

4. 방의 수)

배열명.length => 4

 

5. 방의 값 얻기)

배열명[인덱스]
arr[0] // 2024

 

- 일괄 처리(모든 방의 값을 얻기)

for(int i = 0; i < 배열명.length; i++){
    배열명[i]
}

 

- 선언과 생성을 한 번에)

데이터형[] 배열명 = new 데이터형[방의수];

 

* 일차원 배열의 초기화(기본형 형식의 사용 - new를 기술하지 않고 사용하는 것)

- 배열을 선언하면서 값을 할당할 때 사용.

- 사용할 값을 알고 있을 때.

 

문법)

데이터형[] 배열명 = {값,,,,,,};	// new 데이터형[](방의 크기를 설정하면 error)가 생략되어 있다.

int[] arr = {10, 20, 30, 400};

int[] arr = new int[]{10, 20, 30, 400};

 

배열에서 최대값 구하기

 

배열의 내림차순 정렬

728x90