# Java: String.split() 정규식 예제 모음
## ✅ 기본 문법
```java
String[] result = 문자열.split("정규표현식");
```
`split()`은 인자로 ****정규표현식(String regex)**** 을 받기 때문에, ****메타 문자(예:** `.` `|` `*`**)는 반드시 이스케이프**** 해야 한다.
---
## 1. ****공백 기준 분할****
### 1.1 공백 하나
```java
String s = "hello world";
String[] arr = s.split(" ");
```
### 1.2 공백 여러 개 (1개 이상)
```java
String s = "hello world java";
String[] arr = s.split("\\s+"); // \\s = 공백 문자, +는 1개 이상
```
### 1.3 탭 또는 공백
```java
String s = "a\tb c";
String[] arr = s.split("[ \t]+");
```
---
## 2. ****콤마(,) 기준 분할****
```java
String s = "apple,banana,grape";
String[] arr = s.split(",");
```
### 2.1 콤마 + 공백 제거 (CSV 정리)
```java
String s = "apple, banana, grape";
String[] arr = s.split(",\\s*"); // , 뒤 공백 무시
```
---
## 3. ****특수 문자 기준 분할****
> 정규표현식에서 특수 문자는 반드시 ****이스케이프(\\)**** 필요!
문자
| 정규표현식에서 의미
| split에 쓰는 방식
|
---|
`.`
| 모든 문자
| `"\\."`
|
`
| `
| OR (또는)
|
`*`
| 반복자
| `"\\*"`
|
`(`
`)`
`[`
`]`
| 그룹 지정
| `"\\("`, `"\\["`
|
### 3.1 마침표(`.`) 기준
```java
String s = "www.example.com";
String[] arr = s.split("\\.");
```
### 3.2 파이프(`|`) 기준
```java
String s = "red|green|blue";
String[] arr = s.split("\\|");
```
---
## 4. ****숫자/문자 기준 분할****
### 4.1 숫자만 기준으로 나누기
```java
String s = "abc123def456ghi";
String[] arr = s.split("\\d+"); // 숫자(1개 이상) 기준 나눔
```
### 4.2 문자 기준 나누기
```java
String s = "123abc456def";
String[] arr = s.split("[a-zA-Z]+"); // 알파벳 기준 나눔
```
---
## 5. ****복수 구분자 분리****
### 5.1 콤마(,) 또는 세미콜론(;) 또는 공백
```java
String s = "apple,banana;grape orange";
String[] arr = s.split("[,; ]");
```
### 5.2 AND/OR 조건 키워드 분리
```java
String s = "red and blue or green";
String[] arr = s.split("\\s+(and|or)\\s+"); // 공백 포함한 and/or 기준
```
---
## 6. ****문장 끝 단위 분리 (구두점)****
```java
String s = "Hi. I am John! Nice to meet you?";
String[] arr = s.split("[.!?]\\s*"); // . ! ? 뒤 공백까지 포함
```
---
## 7. ****빈 문자열 처리****
```java
String s = "a,,b,c";
String[] arr = s.split(",", -1); // -1 옵션으로 빈 항목도 유지
System.out.println(Arrays.toString(arr));
// 출력: [a, , b, c]
```
---
## 🧾 보너스: 정규표현식 요약표
패턴
| 의미
| 예시
|
---|
`\\s`
| 공백 문자 (스페이스, 탭 등)
| `"\\s+"`
→ 연속된 공백
|
`\\d`
| 숫자 (0~9)
| `"\\d+"`
→ 숫자 1개 이상
|
`\\w`
| 문자/숫자/밑줄
| `"\\w+"`
|
`.`
| 아무 문자 한 개
| `"a.b"`
→ "acb", "a1b" 가능
|
`[abc]`
| a 또는 b 또는 c
| `"a[bc]d"`
→ "abd", "acd"
|
`[^abc]`
| a,b,c 제외한 문자
| `"[^0-9]"`
→ 숫자 제외
|
`+`
| 앞의 패턴 1번 이상 반복
| `"\\s+"`
|
`*`
| 0번 이상 반복
| `"a*"`
|
`
| `
| OR
|
---
## ✅ 결론
- `split()`은 ****정규표현식 기반의 유연한 문자열 분리****가 가능하다.
- 단순 입력에는 `StringTokenizer`, 복잡한 기준 분리에는 `split()`이 적합.
- 특수문자 분리 시 반드시 ****이스케이프(**`\\`**)**** 를 주의할 것!
---