API - String, regex

JK·2022년 12월 24일
0

JAVA

목록 보기
19/28
post-thumbnail

String

  • String은 객체 자료형이다.
    첫 문자가 대문자로 시작하므로 기초데이터가 아닌 객체데이터
  • 하지만 뒤에 생성자(new)를 사용하지 않고 기초데이터를 만들 때처럼 초기화 하고 있다

사용법 - 두 경우 모두 사용 가능

		String str1 = "Java";
		String str2 = "Java";
		String str3 = new String("Java");
  • 두 사용법의 차이점을 알아보자
package com.lec.ex1_string;

public class Ex01_String {
	public static void main(String[] args) {
		String str1 = "Java";
		String str2 = "Java";
		String str3 = new String("Java");
		if(str1==str2) {
			System.out.println("str1과 str2는 같은 주소를 참조");
		} else {
			System.out.println("str1과 str2는 다른 주소를 참조");
		}
		System.out.println(str1==str3? "str1과 str3은 같은 주소" : "str1과 str3은 다른 주소");
		str2 = "Java~";
		System.out.println(str1==str2? "수정후 같은 주소 참조":"수정후 다른 주소 참조");
		System.out.println("str1 : " + str1);
		System.out.println("str2 : " + str2);
	}
}
  • 결과
    str1과 str1의 출력값이 Java로 같아 주소도 같다고 본다
    하지만 str1과 str3도 Java로 같지만 str3은 new를 사용하여 생성하였으므로 주소는 다르다
    str2를 Java~로 수정하여 str1, 2, 3이 모두 각기 다른 주소를 가지게 되었다
str1과 str2는 같은 주소를 참조
str1과 str3은 다른 주소
수정후 다른 주소 참조
str1 : Java
str2 : Java~

String Api Method

  1. String concat(String str) : 저장된 문자열과 str문자열을 결합
  2. String substring(int begin) : 시작위치부터 마지막까지의 문자열을 반환
  3. int length() : 문자열 길이를 반환
  4. String toUpperCase() : 대문자로 반환
  5. String toLowerCase() : 소문자로 반환
  6. char charAt(int index) : index 위치의 문자를 반환
  7. int indexOf(char ch) : 첫번째 ch문자의 위치를 반환
  8. int lastIndexOf(char ch) : 마지막 ch문자의 위치를 반환
  9. boolean equals(String str) : 지정된문자열과 str문자열이 같은지 비교
  10. boolean equalslgnoreCase(String str) : 대소문자구분없이 지정된문자열과 str문자열이 같은지 비교
  11. String trim() : 문자열 앞뒤 공백제거
  12. String replace(char old, char new) : 문자열 내의 old문자를 new문자로 반환
  13. String repalceAll(String old, String new) : 문자열 내의 old문자열을 new로 반환

regex(정규표현식)

  • 정규표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식의 언어이다

1. 참조(https://goo.gl/Hlntbd 위키백과)

2. 간략문법

\d : (숫자와 매치, [0-9]와 동일)
\D : (숫자가 아닌 것)
\w : (영문자나 숫자 , [A-Za-z][0-9]와 동일
\W : (영문자나 숫자가 아닌 문자)
. : (문자)
\. : .
{2,} : (2번 이상 반복)
{2,4} : (2~4회 반복)

  • : (1번 이상 반복)
  • : (0번 이상 반복)
    ? : (0번이나 1번 반복)

3. 정규표현식 연습장(https://www.regexpal.com/)

ex1. ip주소 : 198.163.2.444
			([0-9]{1,3}\.){3}[0-9]{1,3} 
ex2. 전화번호 : 02 777 7777 / 010 3333 3333 / 010-7777-7777 / 010.5555.5555 / 02)131.5444 
		     \d{2,3}.?\d{3,4}.?\d{4}
ex3. 주민등록번호 : 981118-2033333 / 9812121044444
		  	 	\d{2}[0-1]\d[0-3]\d-?[1-4]\d{6}
ex4. 이메일 : abc@naver.com / wj@co.kr
		  	 \w+@+\w+(\.\w+){1,2}

String Api를 이용한 문제

1. 주민번호로 남 여 판별하기

  • 주민번호를 입력받아 여자인지 남자인지 출력
  • 주민번호는 “920225-2012121”형식으로 입력받는다.
package com.lec.ex1_string;

import java.util.Scanner;

public class Ex05_juminNoQuiz {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("주민번호(6자리-7자리) : ");
		String juminNo = scanner.next();		// 주민번호 입력 받기
		int  genderInt = Integer.parseInt(juminNo.substring(7,8));	주민번호의 7번째 문자 변수 genderInt
		if (genderInt == 1 || genderInt == 3) { //genderInt가 1, 3이면 남자
			System.out.println("남성입니다");
		} else if (genderInt == 2 || genderInt == 4) {  //genderInt가 2, 4이면 여지
			System.out.println("여성입니다");
		} else {		// else로 예외값 출력
			System.out.println("유효하지 않은 주민번호입니다");
		}
	}
}

결과

주민번호(6자리-7자리) : 980101-1011111
남성입니다

주민번호(6자리-7자리) : 990101-4033333
여성입니다

2. 전화번호를 입력받아 다양하게 변경

package com.lec.ex1_string;

import java.util.Scanner;

public class Ex06_telQuiz {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while (true) {
			System.out.println("전화번호를 입력해주세요(종료는 x)");
			String tel = scanner.next();
			String Odd = "";
			String reverse = "";
			if (tel.equalsIgnoreCase("x"))
				break;
			System.out.println("입력한 전화번호 : " + tel);
			System.out.println("짝수번째 문자열 : ");
			for (int i = 0; i < tel.length(); i++) {
				if ((i % 2) == 0) {
					System.out.print(tel.charAt(i));
				}
			}
			System.out.println();
			for (int i = tel.length() - 1; i >= 0; i--) {
				reverse = reverse + tel.charAt(i);
			}
			System.out.print("문자를 거꾸로 : ");
			System.out.println(reverse);
			System.out.println("전화번호 맨 앞자리 : " + tel.substring(0, 3));
			System.out.println("전화번호 뒷자리 : " + tel.substring(tel.lastIndexOf('-') + 1));
		}
	}
}

결과

전화번호를 입력해주세요(종료는 x)
031-952-4444
입력한 전화번호 : 031-952-4444
짝수번째 문자열 : 
019244
문자를 거꾸로 : 4444-259-130
전화번호 맨 앞자리 : 031
전화번호 뒷자리 : 4444
전화번호를 입력해주세요(종료는 x)

3. 전화번호 뒷자리 검색하여 검색 결과 출력

  • 배열에 전화번호 데이터를 넣었다
  • tels[i].substring(tels[i].lastIndexOf("-")+1) 전화번호 뒷자리 변수
  • 검색한 뒷자리와 뒷자리가 일치하면 전화번호 출력
package com.lec.ex1_string;

import java.util.Scanner;

public class Ex07_searchPostTelQuiz {
	public static void main(String[] args) {
		String[] tels = {"010-9999-9999", "010-8888-8888", "010-7777-8888", "010-6666-8888"};
		Scanner scanner = new Scanner(System.in);
		while(true) {
			boolean searchOk = false;    //검색한 결과가 있으면 true
			System.out.print("검색하고자 하는 전화번호 뒷자리는 ?(종료는 x)");
			String searchTel = scanner.next();
			if(searchTel.equalsIgnoreCase("x"))
				break;
			for(int i=0 ; i<tels.length ; i++) {
				String postTel = tels[i].substring(tels[i].lastIndexOf("-")+1);
				if(postTel.equals(searchTel)) {
					System.out.println("검색하신 전화번호는 " + tels[i]);
					searchOk = true; // 전화번호 출력여부
				}//if
			}//for
			if(! searchOk) {
				System.out.println("검색하신 전화번호 뒷자리는 없습니다");
			}//if
		}//while
	}///main
}//class

결과

검색하고자 하는 전화번호 뒷자리는 ?(종료는 x)6666
검색하신 전화번호 뒷자리는 없습니다
검색하고자 하는 전화번호 뒷자리는 ?(종료는 x)8888
검색하신 전화번호는 010-8888-8888
검색하신 전화번호는 010-7777-8888
검색하신 전화번호는 010-6666-8888
검색하고자 하는 전화번호 뒷자리는 ?(종료는 x)
profile
씨앗 개발자

0개의 댓글