🔷 영어가 대소문자 합쳐서 52이므로 6비트면 모두 표현할 수 있다.
코드 체계
라고 한다.🔷 ASCII
(American Standard Code for Information Interchange)
1967년 미국에서 제정된 문자 인코딩 표준
7 bit 인코딩으로 128문자를 표현하며 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 이루어져 있다.
💡 48 - 0, 65 - A, 97 - a 만 외워두자
char a = 'A'; // char 한 개는 외따옴표, 2바이트 크기이며 음수는 포함 X
System.out.println((int)'A'); // 명시적 형변환을 통해서 저장 가능
int b = 'A'; // 묵시적 형변환 (char는 2byte, int는 4byte라 가능)
System.out.println(b); // 65
System.out.println('9'-48); // '0'의 값을 빼면 문자를 실제 숫자처럼 사용할 수 있다.
System.out.println('7'-'0');
// 비트연산자로 대문자를 소문자로, 소문자를 대문자로 바꾸기
System.out.println((char)'A'^32); // XOR 연산
System.out.println((char)'a'^32); // XOR 연산
🔷 확장 아스키
🔷 유니코드
🔷 String
클래스 사용(java)
🔷 문자열 비교 및 배열 생성
// 문자열 생성
String str1 = "abc";
String str2 = new String("abc");
// 문자열 비교
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
String str3 = "abc";
String str4 = str2;
String str5 = str3;
System.out.println(str1 == str3); // 리터럴이기 때문에 true
System.out.println(str4 == str2); // 같은 주소 값이라 true
System.out.println(str3 == str5);
System.out.println(str1.equals(str3));
System.out.println(str2.equals(str4));
System.out.println(str3.equals(str5));
// "abc" -> 문자 배열
System.out.println(str3.charAt(1)); // 문자열의 요소를 하나씩 가져올 수 있다.
char [] c = str3.toCharArray(); // 문자열을 문자 배열로 만들어 반환한다.
System.out.println(Arrays.toString(c));
🔷 문자열 뒤집기
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 문자열 뒤집기
String text = "소고기먹고싶다";
// 1. 거꾸로 읽기
char[] str = new char[text.length()];
for(int i = text.length()-1, idx = 0; i >=0; i--, idx ++) {
str[idx] = text.charAt(i);
}
System.out.println(Arrays.toString(str));
// 2. swap
char [] str2 = text.toCharArray();
int len = str2.length;
for(int i = 0; i < len/2; i++) {
char temp = str2[i];
str2[i] = str2[len-1-i];
str2[len-1-i] = temp;
}
System.out.println(Arrays.toString(str2));
// 3. StringBuilder / StringBuffer
StringBuilder sb = new StringBuilder();
sb.append(text);
sb.reverse();
System.out.println(sb);
}
}
🔷 형 변환
String sNum = "1234";
String sNum2 = " 1234 ";
int num = Integer.parseInt(sNum); // int형으로 변환
int num2 = Integer.parseInt(sNum2.trim()); // 공백문자 제거
System.out.println(num);
System.out.println(num2);
String sNum3 = String.valueOf(num2); // int를 String으로 변환
System.out.println(atoi(sNum));
// 문자열 변환 동작원리 알아보기
// 문자열을 정수로 뒤바꾸기
public static int atoi (String text) {
int value = 0;
int digit = 0;
// 앞에서부터 차례로 읽으면서 문자를 숫자로 바꾸고 자릿수 올리기
for(int i = 0; i < text.length(); i++) {
char num = text.charAt(i); // i번째 자리의 문자 읽기
if(num >= '0' && num <= '9') {
digit = num - '0';
} // 숫자임을 확인하는 조건
else {
// 예외 처리
}
}
value = (value*10)+digit;
return value;
}
🔷 고지식한 패턴 검색 알고리즘
완전 검색(브루트포스)
public class Main {
public static void main(String[] args) {
// 브루트 포스
// 해당 패턴이 본문안에 들어있는가? 몇 번째 인덱스부터 시작하는가?
String t = "This iss a book";
String p = "iss";
System.out.println(bruteForceFor(t, p));
}
public static int bruteForceWhile(String t, String p) {
int N = t.length(); // 본문의 길이
int M = p.length(); // 패턴의 길이
int i = 0; // 본문의 index
int j = 0; // 패턴의 index
while(j < M && i < N) {
if(t.charAt(i) != t.charAt(j)) {
i -= j;
j = -1;
}
i++;
j++;
}
if(j==M)
return i - M;
return -1;
}
public static int bruteForceFor(String t, String p) {
int N = t.length(); // 본문의 길이
int M = p.length(); // 패턴의 길이
for(int i =0; i < N-M+1; i++) {
boolean flag = true;
for(int j = 0; j < M; j++) {
if(p.charAt(j) != t.charAt(i+j)) {
flag = false;
break;
}
} // 패턴 매칭을 수행하는 for문
if(flag) {
return i;
}
} // 패턴 검사의 시작점 위치
return -1; // 못 찾았을 경우
}
}
🔷 보이어 무어 알고리즘