-
Notifications
You must be signed in to change notification settings - Fork 24
/
P79_1.java
38 lines (36 loc) · 1.3 KB
/
P79_1.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package ch19;
public class P79_1 {
public boolean check(int[] data, int start, int size) {
// size만큼 이동하면서 각 바이트 10으로 시작여부 확인
for (int i = start + 1; i < start + size + 1; i++) {
if (i >= data.length || data[i] >> 6 != 0b10) {
return false;
}
}
return true;
}
public boolean validUtf8(int[] data) {
int start = 0;
// 문자 전체 길이만큼 순회
while (start < data.length) {
// 문자의 시작 바이트
int first = data[start];
// 11110으로 시작하면 나머지가 3바이트여야 한다.
if (first >> 3 == 0b11110 && check(data, start, 3)) {
start += 4;
// 1110으로 시작하면 나머지가 2바이트여야 한다.
} else if (first >> 4 == 0b1110 && check(data, start, 2)) {
start += 3;
// 110으로 시작하면 나머지가 1바이트여야 한다.
} else if (first >> 5 == 0b110 && check(data, start, 1)) {
start += 2;
// 1바이트 문자
} else if (first >> 7 == 0) {
start++;
} else {
return false;
}
}
return true;
}
}