- 문자열이 비어있는지?
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};

