공부방
String 본문
문자로 정수형 나타내기
package test1;
public class test1 {
public static void main(String[] args) {
int zero = '0' - '0';
int one = '1' - '0';
int two = '2' - '0';
}
}
문자열(String)로 숫자 입력받고 숫자(Int) 배열로 나타내기
package test1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import org.omg.CosNaming.IstringHelper;
public class test2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
char[] arr = str.toCharArray();
for (int i = 0; i < arr.length; i++) {
int num=arr[i]-'0';
System.out.println(num);
}
}
}
//
1234
1
2
3
4
1234는 문자열
1
2
3
4
는 정수형
문자열->정수형
정수형->문자열
package test1;
public class test3 {
public static void main(String[] args) {
// atoi : 문자열 => 정수
int num = atoi("1234");
System.out.println(num);
// itoa : 정수 => 문자열
String str = itoa(4321);
System.out.println(str);
}
private static String itoa(int value) {
StringBuilder sb = new StringBuilder();
int tmp = value;
while (tmp > 0) {
char c = (char) (tmp % 10 + 48); // 각 숫자에다가 48을 더해줘야 그 숫자의 문자코드가 됨
sb.append(c);
tmp /= 10; // 그 다음자리로 넘어간다.
}
return sb.reverse().toString();
}
private static int atoi(String string) {
char[] arr = string.toCharArray();
int value = 0;
int digit;
// 음수인 경우에는 '-' 이 있는지 여부를 체크한다.
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= '0' && arr[i] <= '9')
digit = arr[i] - '0';
else
break;
value = (value * 10) + digit;
}
return value;
}
}
문자열 뒤집기
package test1;
import java.util.Arrays;
public class test4 {
public static void main(String[] args) {
//문자열 뒤집기
//1.swap
String str="싸피";
char[] arr=str.toCharArray();
//길이의 반만큼만 반복
for (int i = 0; i < arr.length/2; i++) {
//swap
char temp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
System.out.println(Arrays.toString(arr));
//문자열의 배열->문자열
String str2=String.valueOf(arr);
System.out.println(str2);
//2. 새로운 배열을 만들어서 거꾸로
StringBuilder sb=new StringBuilder();
for (int i = arr.length-1; i >=0; i--) {
sb.append(arr[i]);
}
System.out.println(sb.toString());
//3. StringBulider
sb.reverse();
}
}
패턴 매칭 : 고지식한 패턴 검색 알고리즘
본문 문자열을 처음부터 끝까지 차례대로 순회하면서 패턴 내의 문자들을 일일이 비교하는 방식으로 동작
package test2;
public class test1 {
public static void main(String[] args) {
char[] t = "This iss a book".toCharArray();//문자열을 바로 문자 배열로 만들어줌.
char[] p = "iss".toCharArray();
int idx = BruteForceFor(p, t);
System.out.println(idx);
idx = BruteForceWhile(p, t);
System.out.println(idx);
}
private static int BruteForceWhile(char[] p, char[] t) {
int n = t.length;
int m = p.length;
int i = 0;
int j = 0;
while(j < m && i< n ) {
if(t[i] != p[j]) {
i -= j;
j = -1;
}
i++; j++;
}
// while문이 끝났다는 것은?
// 1. j == m => 찾은 상황
// 2. j != m => 못찾은 상황
if(j==m) return i - m;
else return -1;
}
private static int BruteForceFor(char[] p, char[] t) {
int n = t.length;
int m = p.length;
for(int i=0; i<n-m+1; i++) { // pattern이 한 칸씩 shift가 최대 n-m+1번 수행
boolean flag = true; // 각 shift에서 일단 일치한다고 가정하고 비교를 시작
for(int j=0; j<m; j++) { // 각 shift에서 1:1 비교가 최대 m번 수행
if(p[j] != t[i+j]) { // 일치하지 않는게 발견되면
flag = false; // 일치하지 않는다고 바꾼다
break;
}
}// 다 돌았을 때 flag => true : 모두 일치
// flag => false : 모두 일치 X
if(flag) return i;
}
return -1;
}
}
//
5
5
//혼자 복습
public class 나홀로패턴검색 {
public static void main(String[] args) {
char[] t="fhkviaieabviaaoihohviaf".toCharArray();
char[] p="via".toCharArray();
int a= BruteForce(t, p);
System.out.println(a);
}
public static int BruteForce(char[] t, char[] p) {//패턴 검색 메서드
int n=t.length;//찾아질 문장의 길이
int m=p.length;//찾을 단어의 길이
int count=0;//찾은 수 만큼 더해줄 변수
for (int i = 0; i < n-m+1; i++) {//찾을 문장의 길이에서 찾을 단어의 길이만큼
//뺀 후 1을 더한 배열의 인덱스까지 찾을 것
boolean check=true;//일단 다들 일치한다고 가정
for (int j = 0; j < m; j++) {//찾아질 단어가 길이가 m이고 그 단어만큼 찾을 것이기 때문에
if (p[j]!=t[i+j]) {//만약 맞지 않는 곳을 찾았다면 그곳은
check=false;//일치하지 않는 곳이기 때문에 false입력
}
}
if (check) {//전체에서 일치하지 않는 곳들은 다 false이기 때문에
//21번 라인에서 걸러지지 않은 것들은 다 자동으로 true가 된다.
count++;//그 걸러지지 않은 곳들만큼 카운트 하나씩 더해준다.
}
}
return count;//메서드의 끝에서 int이기 때문에 센 count를 return
}
}