Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
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
Archives
Today
Total
관리 메뉴

기록

day 0527 문자열 본문

📖

day 0527 문자열

슈슈파나 2024. 5. 27. 17:51
package com.kosta.exam01;

public class ChatAtTest {

	public static void main(String[] args) {
		String data = "hello java";
		String name = "이름";
		String year = "2024";
		
		char c1 = data.charAt(0);
		System.out.println(c1);
		
		// int로 하면 코드값이 출력된다 
		int c2 = year.charAt(0);
		char c3 = year.charAt(0);
		System.out.println(c2);
		System.out.println(c3);
		
		// 캐스팅 하거나
		int c4 = (int)year.charAt(0);
		System.out.println(c4);
		
		// Integer.parseInt +""; 문자열로 만들기 
		int c5 = Integer.parseInt(year.charAt(0)+""	);
		System.out.println(c5);
		
	}
}

package com.kosta.exam01;

public class ChatAtTest02 {

	public static void main(String[] args) {
		String data = "hello java";
		// 문자열 길이
		System.out.println(data.length());

		int n = 0;
		for (int i = 0; i < data.length(); i++) {
			char ch = data.charAt(i);
			System.out.println(ch);
			
			if(ch == 'a') {
				n++;
			}
		}
		System.out.println("소문자 a의 수는 : " + n);
	}
}

package com.kosta.exam01;

import java.util.Scanner;

public class EqualsTest {

	public static void main(String[] args) {
		// 사용자한테 아이디와 암호를 입력받아서 올바른지 판별하는 프로그램
		// 아이디 : "kosta", 암호 : "1234"
		Scanner sc = new Scanner(System.in);
		String id, pw;
		System.out.println("아이디 : ");
		id = sc.next();
		
		System.out.println("암호 : ");
		pw = sc.next();
		
		// == 으로 같은문자인지 확인 불가능
		// if(id == "kosta" && pw == "1234") {
		if(id.equals("kosta") && pw.equals("1234")) {
			System.out.println("어서오세요.");
		}else {
			System.out.println("아이디와 암호를 확인하시오.");
		}
	}
}

 

/equalsIgnoreCase 대소문자 구별없이 참으로 처리/

if(id.equalsIgnoreCase("kosta") && pw.equalsIgnoreCase("1234")) {
    System.out.println("어서오세요.");
}else {
    System.out.println("아이디와 암호를 확인하시오.");
}

 

/toLowerCase().equals() 메소드 체이닝/

// 메소드 연결해서 사용 toLowerCase().equals()
if(id.toLowerCase().equals("kosta") && pw.equals("1234")) {
    System.out.println("어서오세요.");
}else {
    System.out.println("아이디와 암호를 확인하시오.");
}

 

/trim/

package com.kosta.exam01;

public class TrimTest {

	public static void main(String[] args) {
		String data = "   hello  ";
		System.out.println(data.length());		
		// 공백도 문자열로 출력
		System.out.println(data);
		System.out.println("|" + data + "|");
		
		// 공백 제거 trim
		// data 자체 공백은 제거되지 않는다
		System.out.println("|" + data.trim() + "|");
		System.out.println("|" +data + "|");
		
		// data에 값을 대입해줘야 한다
		data = data.trim();
		System.out.println("|" + data.trim() + "|");
		System.out.println("|" +data + "|");
	}
}

 

/String.valueOf 문자열로 만들기/

package com.kosta.exam01;

public class ValueOfTest {

	public static void main(String[] args) {
		// 다양한 형태의 자료형을 모두 문자열(String)로 만들 수 있다
		int year = 2024;
		// String data_year = year + "";
		String data_year = String.valueOf(year);  
		System.out.println(data_year);
		
		double height = 56.7;
		// String data_height = height + "";
		String data_height = String.valueOf(height);
		System.out.println(data_height);
		
		boolean flag = false;
		// String data_flag = flag + "";
		String data_flag = String.valueOf(flag);
		System.out.println(data_flag);
		
		char[] arr = {'a', 'b', 'c'};
		String data_arr = String.valueOf(arr);
		System.out.println(data_arr);
	}
}

 

/IndexOf/

package com.kosta.exam01;

public class IndexOfTest {

	public static void main(String[] args) {
		String data = "hello  java";
		int n = data.indexOf("e");
		System.out.println(n);
	
		// 공백 포함 문자열 위치 출력
		int n2 = data.indexOf("java");
		System.out.println(n2);
	}
}

package com.kosta.exam01;

public class IndexOfTest02 {

	public static void main(String[] args) {
		String data = "hello  java hello oracle";
		// 맨 처음 hello 위치를 나타낸다
		int n = data.indexOf("hello");
		System.out.println(n);

		// 1번째 index 뒤에서부터 찾는다
		int n2 = data.indexOf("hello", 1);
		System.out.println(n2);
	}
}

/lastIndexOf/

package com.kosta.exam01;

public class LastIndexOfTest {

	public static void main(String[] args) {
		// lastIndexOf 끝에서부터 찾는다
		String data = "java";
		int n1 = data.indexOf("a"); //1
		int n2 = data.lastIndexOf("a"); //3
		System.out.println(n1);
		System.out.println(n2);
	}
}

 

/substring 문자열 잘라오기/

beginning은 포함 되지만, ending은 포함되지 않는다

package com.kosta.exam01;

public class SubStringTest {

	public static void main(String[] args) {
		String data = "hello java";
		
		// beginindex 시작점부터 끝까지
		String str1 = data.substring(1);
		System.out.println(str1);
		
		// 시작점은 포함되지만 끝은 포함되지 않는다
		String str2 = data.substring(1, 7);
		System.out.println(str2);
	}
}

package com.kosta.exam01;

public class IndexOfSubstring {

	public static void main(String[] args) {
		// 어떤 사람의 이메일을 아이디만 추출하기
		String email = "kosta@naver.com";
		
		// String id = email.substring(0, 5);
		String id = email.substring(0, email.indexOf("@"));
		System.out.println(id);
	}
}

package com.kosta.exam01;

import java.util.Scanner;

public class IndexOfSubstring02 {

	public static void main(String[] args) {
		// 어떤 사람의 이메일을 입력받아서 아이디만 추출하여 출력하는 프로그램
		String email;
		Scanner sc = new Scanner(System.in);
		System.out.print("이메일을 입력하시오. : ");
		email = sc.next();
		
		String id = email.substring(0, email.indexOf("@"));
		System.out.println(id);
	}
}

package com.kosta.exam01;

import java.time.Year;
import java.util.Date;
import java.util.Scanner;

public class AgeFromJumin {

	public static void main(String[] args) {
		// 사용자한테 주민번호를 입력받아 나이를 출력하는 프로그램 작성 
		Scanner sc = new Scanner(System.in);
		String jumin;
			
		System.out.print("주민번호를 입력하시오 (하이픈(-)을 입력하시오) : ");
		jumin = sc.next(); // 960101-1234567, 010502-3456789
		
		String jumin_year = jumin.substring(0, 2); // 96, 01
		char jumin_gender = jumin.charAt(7); // 1, 3
		
		// System.out.println(jumin_year);
		// System.out.println(jumin_gender);
		
		int userYear = Integer.parseInt(jumin_year) + 1900;
		
		if(jumin_gender == '3' || jumin_gender == '4') {
			userYear += 100;
		}
		System.out.println("출생연도 : " + userYear); // 출생연도 확인
		
		int thisYear = (new Date()).getYear()+1900;
		int age = thisYear - userYear;
		
		System.out.println("나이 : " + age);
	}
}

package com.kosta.exam01;

import java.util.Date;
import java.util.Scanner;

public class FreeCheckCancerTest {
	public static void main(String[] args) {
		/*
		사용자한테 주민번호를 입력받아 (하이픈 포함)
		무료암검진 대상자인지 판별하는 프로그램을 작성합니다
		무료암검진 대상자는 40세 이상이고 올해 홀수연도이면 홀수연도에 태어나면 홀수연도에 태어난 사람이고
		올해가 짝수연도이면 짝수연도에 태어난 사람이며 무료암검진 항목은 다음과 같다
		40세 이상 남자 위암, 간암, 일반암
		40세 이상 여자 위암, 간암, 일반암, 자궁암, 유방암
		50세 이상 남자 위암, 간암 일반암, 대장암
		50세 이상 여자 위암, 간암 일반암, 대장암, 자궁암, 유방암
		*/

		Scanner sc = new Scanner(System.in);
		String jumin;

		// 올해연도
		int thisYear = (new Date()).getYear() + 1900;
		
		System.out.print("주민번호를 입력하시오 (하이픈 포함) : ");
		jumin = sc.next();
		
		// 주민번호 앞 두자리를 잘라와서 정수로 변환 + 1900
		int userYear = Integer.parseInt(jumin.substring(0, 2)) + 1900;
		// 주민번호 성별 숫자 가져오기 1,2,3,4
		char gender = jumin.charAt(7);

		// 성별의 값이 3, 4이면 출생연도에 +100
		if(gender == '3' && gender == '4') {
			userYear += 100;
		}
		
		// 올해연도 - 출생연도 = 나이 계산
		int age = thisYear - userYear;
		String data = "위암, 간암, 일반암";
		
		// 성별은 남자
		String gender_str = "남자";
		
		// 성별 값이 2이거나 4라면 여자
		if(gender == '2' || gender == '4') {
			gender_str = "여자";
		}
		
		System.out.println("** 무료암검진 판별 **");
		System.out.println("올해연도 : " + thisYear);
		System.out.println("출생연도 : " + userYear);
		System.out.println("나이 : " + age);
		System.out.println("성별 : " + gender_str);
		System.out.println();
		
		if(age >= 40 && thisYear%2 == 0 && userYear%2 == 0) {	
			
			if(age >= 50) {
				data += ", 대장암";
			}
			
			if(gender == '2' || gender == '4') {
				data += ", 자궁암, 유방암";
			}
			
			System.out.println("무료암검진 대상자입니다");
			System.out.println("암검진 항목 : " + data);
		}else {
			System.out.println("무료암검진 비대상자입니다.");
		}
	}
}

 

 

ㅠ 현재 생존자 없음 ㅠ.... 이몸이 죽고 죽어 일백번 고쳐죽ㅇㅓㅓ...백골이 진토되어 넋이라도 있고 없고....

 

ㅍ = 11-{(2×ㄱ+3×ㄴ+4×ㄷ+5×ㄹ+6×ㅁ+7×ㅂ+8×ㅅ+9×ㅇ+2×ㅈ+3×ㅊ+4×ㅋ+5×ㅌ) mod 11}

ㅍ..... 주민번호 계산하는 프로그램.... 만들..기..

 

package com.kosta.exam01;

import java.util.Scanner;

/*
사용자한테 주민등록번호를 입력받아서 올바른 주민등록번호인지 판별하는 프로그램을 작성
<< 처리 조건 >>
ㅍ = 11-{(2×ㄱ+3×ㄴ+4×ㄷ+5×ㄹ+6×ㅁ+7×ㅂ+8×ㅅ+9×ㅇ+2×ㅈ+3×ㅊ+4×ㅋ+5×ㅌ) mod 11}
즉, 소괄호 안에 있는 것을 계산한 값을 11로 나눠서 나온 나머지를 11에서 뺀 값이 ㅍ이다. 
(단, 10은 0, 11은 1로 표기한다.)
*/
public class CheckJumin {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);		
		
		int[] n = {2,3,4,5,6,7,0,8,9,2,3,4,5}; // * 배열		
		int r = 0; // 연산 결과를 담을 변수
		int check = 0; // 주민번호 맨 끝자리를 담을 변수 
		
		System.out.print("주민번호를 입력하시오 : ");
		String jumin = sc.next();
		
		// 사용자가 입력한 주민번호의 맨 마지막 자리를 check에 저장
		check = Integer.parseInt(jumin.charAt(jumin.length() - 1) + ""); // 맨 마지막 index
		
		// 반복문 0부터 주민번호 길이 - 1보다 적을 때 까지 수행하여 해당하는 수를 곱하기하여 누적한다
		for(int i = 0; i < jumin.length() - 1; i++) {
			if(i == 6) {
				continue;
			}
			r += n[i] * Integer.parseInt(jumin.charAt(i) + "");
		}
		// 누적된 결과에 11로 나눈 나머지를 구한다
		r = r % 11;  // A
		
		// 11에서 그 결과를 빼준다
		r = 11 - r;   // B
		
		// A에서 11로 뺀 나머지가 만약에 0이면 B의 결과는 11, 1이면 결과는 10
		// 주민번호 맨 마지막 자리는 한자리 숫자라서 계산된 결과에 따라 다음과 같은 조건식을 수행한다
		if(r == 10) {
			r = 0;
		}
		
		if(r == 11) {
			r = 1;
		}
		
		if(r == check) {
			System.out.println("올바른 주민등록번호 입니다.");
		}else {
			System.out.println("잘못된 주민등록번호 입니다.");
		}
	}
}

// 하이픈(-)을 기준으로 앞에는 6자리, 뒤에는 7자리 숫자 형식이 맞는지 판별하기
boolean flag = true;
// 14자리가 맞는지
if(jumin.length() != 14 || jumin.charAt(6) != '-') {
    flag = false;
}else {

    for(int i = 0; i < jumin.length(); i++) {
        char ch = jumin.charAt(i);
        if(i != 6) {
            if(ch < '0' || ch > '9') {
                flag = false;
            }
        }
    }
}

if(flag == false) {
    System.out.println("올바른 주민번호 형식이 아닙니다.");
    return;
}

 

/정규표현식/

a 이거나~ b 이거나~ c이거나~ d는 고정

(a | b | c) d = [abc]d

 

 

 

/regular expression/

https://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

 

/정규 표현식 사용하기/

System.out.print("주민번호를 입력하시오 : ");
String jumin = sc.next();

// [0에서 9사이] {6개} 하이픈 - [0에서 9사이]{7개}
// String regex = "\\d{6}-\\d{7}";
String regex = "[0-9]{6}-[0-9]{7}";

if(jumin.matches(regex) != true) {
    System.out.println("올바른 주민등록번호 형식이 아닙니다");
    return; // return하지 않으면 형식이 올바른 것
}

package com.kosta.exam01;

import java.util.Scanner;

public class CheckEmail {

	public static void main(String[] args) {
		// 사용자한테 이메일을 입력받아서 올바른 이메일형식인지 판별하는 프로그램
		Scanner sc = new Scanner(System.in);
		String email;
		
		System.out.print("이메일을 입력하시오 : ");
		email = sc.next();
		
		// + 한글자 이상
		String regex = "[A-Za-z0-9]+@[A-Za-z0-9]+\\.[A-Za-z]+";
		
		if(email.matches(regex)) {
			System.out.println("올바른 이메일 형식 입니다.");
		}else {
			System.out.println("올바른 이메일 형식이 아닙니다.");
		}
	}
}

 

/startsWith, endsWith/

package com.kosta.exam01;

public class StartsWithEndsWith {

	public static void main(String[] args) {
		String data = "hello java";
		// hello로 시작하나요?
		boolean flag1 = data.startsWith("hello");
		boolean flag2 = data.endsWith("java");
		boolean flag3 = data.endsWith("oracle");
		
		System.out.println(flag1); // true
		System.out.println(flag2); // true
		System.out.println(flag3); // false
	}
}

 

/replace/

package com.kosta.exam01;

public class ReplaceTest {

	public static void main(String[] args) {
		// 특정 문자를 바꿔준다
		String data1 = "hello java hello oracle";
		String data2 = data1.replace("hello", "안녕");
		String data3 = data1.replaceAll("hello", "안녕"); // 정규표현식을 쓸 수 있다
		
		System.out.println(data1);
		System.out.println(data2); // data1은 변동되지 않는다
		System.out.println(data3);
	}
}

package com.kosta.exam01;

public class IndexOfContainsTest {

	public static void main(String[] args) {
		String data = "hello java hello oracle";
		
		// 문자열 데이터에 "java"를 포함하고 있는지 판별
		if(data.indexOf("java") != -1){
			System.out.println("java를 포함하고 있어요.");
		}else {
		System.out.println("java를 포함하고 있어요.");
		}
		
		// contains
		if(data.contains("java")) {
			System.out.println("java를 포함하고 있어요.");
		}else {
			System.out.println("java를 포함하고 있어요.");
		}		

		// matches
		if(data.matches("java")) { // (".*java.*)
			System.out.println("java를 포함하고 있어요.");
		}else {
			System.out.println("java를 포함하고 있어요.");
		}		
	}
}

 

/split/

package com.kosta.exam01;

public class SplitTest {

	public static void main(String[] args) {
		String data1 = "이름1,이름2,이름3,이름4,이름5";
		// 문자열 데이터를 특정 문자로 분리 해 준다 (comma 로 분리)
		String[] arr1 = data1.split(",");
		
		for(String name : arr1) {
			System.out.print(name);
		}

		String data2 = "이름1 이름2 이름3 이름4 이름5";
		// 문자열 데이터를 특정 문자로 분리 해 준다 (space 로 분리)
		String[] arr2 = data2.split(" ");
		
		for(String name : arr2) {
			System.out.print(name);
		}
	}
}

 

String data1 = "이름1,이름2,이름3,이름4,이름5";
String[] arr1 = data1.split(",");
    for(String name : arr1) {
	    System.out.println(name);
    }

 

위의 split 메소드는 String의 메소드이며 문자열을 특정문자로 분리하여 배열을 반환하는 메소드이다

이러한 문자열을 분리하는 기능은 상당히 많이 이용되어 집니다

 

위의 방법처럼 문자열을 분리할수도 있고

문자열 분리 담당하는 클래스인 "StringTokenizer"을 이용하여 문자열을 분리할수도 있어요

 

import java.util.StringTokenizer;

String data = "이름1 이름2 이름3 이름4 이름5";
StringTokenizer st = new StringTokenizer(data, " ");

분리된 데이터(값) 하나하나를 토큰이라고 불러요

토큰을 하나씩 꺼내오는 메소드가 nextToken();

보통은 토큰이 있는 만큼 반복 실행합니다

또 다음 토큰이 있는지 물어보고 반복실행 합니다 hasMoreTokens()  true, false

 

package com.kosta.exam01;

import java.util.StringTokenizer;

public class StringTokenizerTest {

	public static void main(String[] args) {
		String data = "이름1 이름2 이름3 이름4 이름5";
		StringTokenizer st = new StringTokenizer(data);
		
		// 첫번째 토큰
		// System.out.println(st.nextToken());
		// 두번째 토큰
		// System.out.println(st.nextToken());
		
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
	}
}

 

- 오늘 학습한 내용에 대하여 요약 및 정리하는 시간을 갖고 궁금한 점 질문합니다

- 사용자한테 문장을 입력받아 몇개의 단어로 구성되어 있는지 판별하는 프로그램을 작성합니다

  (단, 공백문자를 포함하여 문장을 입력받기 위하여 nextLine() 메소드 이용)

 

  << 실행 예 >>

  문장을 입력 ==> hello test hello java

  4개의 단어

 

- 사용자한테 문장을 입력받아 거꾸로 출력하는 프로그램을 작성

  << 실행 예 >>

  문장을 입력 ==> hello java

  avaj olleh

 

- 사용자한테 문장을 입력받아 앞뒤가 같은 문자(회문)인지 판별하는 프로그램을 작성

  << 실행 예 >>

  문장을 입력 ==> madam

  앞뒤가 같아요 (회문입니다)

'📖' 카테고리의 다른 글

day 0529 멀티쓰레드  (1) 2024.05.29
day 0528 StringAndStringBuffer_예외처리  (1) 2024.05.28
day 0524 컬렉션_가위바위보_그림판  (0) 2024.05.24
day 0523 컬렉션  (0) 2024.05.23
day 0522 인터페이스  (0) 2024.05.22