본문 바로가기
개발 공부 Today I Learned

[국비 17일차 TIL] 자바 String 메소드

by 개발자신입 2023. 12. 13.
반응형

 

- 연습 문제


이메일을 입력받고 @가 있는지 확인하는 프로그램
@가 없다면 올바르지 않은 이메일입니다 출력

 

  • next() = 스페이스 즉 공백 전까지 입력받은 문자열을 리턴
  • nextLine() = 엔터를 치기 전까지 쓴 문자열을 모두 리턴

 

import java.util.Scanner;

public class Test01 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		String email;
		System.out.println("이메일을 입력하세요.");
		email = sc.next();
		
		System.out.println(email);
		
		if(email.indexOf('@') != -1) {
			System.out.println("올바른 이메일입니다.");
			System.out.println("당신의 ID : " + email.substring(0, email.indexOf('@')));
			System.out.println("당신의 이메일 서버 : "+ email.substring(email.indexOf('@')+1));
		} else {
			System.out.println("올바르지 않은 이메일입니다.");
		}
	}
}

 

 

 


- String 메소드

 

  • 파라미터 (=매개변수) : 괄호 안에 있는 것들.
  • 똑같은 변수명, 메소드, 클래스명 생성 불가

 

메소드 내용
substring() 문자열 자르기 (시작, 끝)
concat() 병합
equals 값이 같은지 확인
lastIndexOf() 마지막에 등장하는 index 위치를 숫자로 반환
replace() 문자를 바꿔줌
toUpperCase() & toLowerCase() 대문자/소문자로 변환
trim() 앞 뒤에 들어가있는 공백 삭제
split() 글자 나누기
Stringtokenizer 여러개의 토큰으로 분리

 

import java.util.Arrays;
import java.util.StringTokenizer;

public class String02 {
	public static void main(String[] args) {
		
		String email = "abcd@kakao.com";
		System.out.println(email.indexOf('@'));  // email 앞글자 수 
		
		System.out.println(email.substring(0)); // substring 
		System.out.println(email.substring(1)); // 문자열 자르기(시작위치)
		System.out.println(email.substring(2));
		System.out.println(email.substring(4));
		System.out.println(email.substring(email.indexOf('@')+1)); // = 5
		
		// 파라미터 : 괄호 안에 있는 것들. (= 매개변수)
		
		int index = email.indexOf('@');
		String subString = email.substring(index+1);
		System.out.println(subString); // = 5
		
		// 문자열 자르기  substring(시작, 끝);
		System.out.println(email.substring(0,email.indexOf('@'))); // 처음부터 @전까지 = abcd
		
		// concat = 병합
		String text = email.concat("입니다.");
		System.out.println(text);
		
		// equals 값이 같은지 확인
		System.out.println(email.equals(text));
		
		// lastIndexOf() 마지막에 등장하는 index 위치를 숫자로 반환
		System.out.println(email.lastIndexOf('m'));   // char 타입
		System.out.println(email.lastIndexOf("com")); // string 타입
		
		// 똑같은 변수명, 메소드, 클래스명 생성 불가
		
		System.out.println(email.length()); // 이메일 길이
		
		// replace : 문자를 바꿔줌
		System.out.println(email.replace('a', 'b')); // bbcd@kbkbo.com
		System.out.println(email.replace("kakao", "daum")); // abcd@daum.com
		
		text = "texttesttext";
		System.out.println(text.replaceAll("test", "테스트")); // text테스트text
		
		// toUpperCase() & toLowerCase()
		System.out.println(email.toUpperCase());
		System.out.println(email.toLowerCase());

		// trim : 앞 뒤에 들어가있는 공백 삭제
		text = " 안녕하세요. 좋은 아침! 퇴근하고싶다. ";
		System.out.println(text.trim());
		
		// split 글자 나누기
		String emailArr[]= email.split("o"); 
		System.out.println(Arrays.toString(emailArr)); // [abcd@kaka, .c, m]
		String textArr[] =  text.split(" ");
		System.out.println(Arrays.toString(textArr));
		
		String text1 = "85, 65, 100";
		System.out.println(Arrays.toString(text1.split(",")));
		
		
		// Stringtokenizer : 여러개의 토큰으로 분리
		StringTokenizer st = new StringTokenizer("Hello, world, java, Spring", (", "));

		System.out.println(st); // 바로 나오지 않음
		
		while(st.hasMoreTokens()) { // 그 안에 찍어줄 값이 있으면 계속 반복
			System.out.println(st.nextToken());
			System.out.println(st.nextToken());
			System.out.println(st.nextToken());
		}
	}
	
	// 메소드 정의
	public static void print() {}
	public static void print(int number) {}
	public static void print(String number) {}
	public static void print(String number, int num) {}
	public static void print(int num, String number) {}
	// 파라미터의 수, 순서, 타입으로 결정됨. 

}

 


  • String = 동기화에 대해 신경 안 씀
  • StringBuffer = 각 메소드별로 동기화 키워드가 존재,  멀티스레드 환경에서도 동기화 지원. (네트워크 환경)
  • StringBuilder = 스레드에 안전한지 여부가 전혀 관계 없는 프로그램 개발 시 사용

 

단순히 성능만 놓고 본다면 연산이 많은 경우

StringBuilder > StringBuffer >>> String

import java.util.Arrays;
import java.util.StringTokenizer;

public class String03 {
	public static void main(String[] args) {
	
		StringBuilder sb = new StringBuilder();
		// append 값 입력
		sb.append("가나다라");
		sb.append("마바사");
		sb.append("자차카타파타하");
		
		System.out.println(sb);
		String text = sb.toString();  // String과 StringBuilder는 다름. toString 사용해야
		System.out.println(text);
		
		System.out.println(text.equals(sb)); // false
		System.out.println(text.equals(sb.toString())); // true
		
		// insert
		sb.insert(0, "하");   // 0번 위치에 하 입력
		sb.insert(sb.length(), "가"); // 길이 끝에 추가
		System.out.println(sb);
		
		// delete
		sb.delete(0, 3);
		System.out.println(sb);
		
		// replace(시작위치, 끝위치, 바꿀 문자열)
		sb.replace(11, 13, "입니다.");
		System.out.println(sb);
		
		// reverse 반대로 돌리기
		sb.reverse();
		System.out.println(sb);
		
		// sb.subSequence
		System.out.println(sb.subSequence(0, 3));
		
		// toString
		text = sb.toString();
		System.out.println(text);
		
		// sb의 저장용량 확인
		sb.append("용량을 계속 늘려가는 capacity");
		System.out.println(sb.capacity());
		
		StringBuilder sb2 = new StringBuilder();
		System.out.println(sb2.length());   // 0
		System.out.println(sb2.capacity()); // 16
		
	}
}
반응형

댓글