문자열(String) 타입에 사용되는 함수

이동주·2025년 3월 2일

JAVA

목록 보기
11/30

.equals()

문자열을 비교할 때 사용함

-> 형태
1. str1와 str2의 문자열이 같은지 확인한다면
str1.equals(str2)
2. str1와 str2의 문자열이 다른지 확인한다면
!str1.equals(str2)

package ch05.sec05;

public class EqualsExam {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str1 = "이동주";
		String str2 = "이동주";
		// str2의 경우 new 구문을 사용하지 않고 문자열을 선언하였기 때문에
		// heap 주소에 같은 문자열이 있으면 그 주소를 참조함.
		
		if(str1 == str2) {
			System.out.println("참조가 같음");
		}
		// str1과 str2는 같은 주소를 참조한 변수이므로 참조가 같음
		else {
			System.out.println("참조가 다름");
		}
		
		if(str1.equals(str2)) {
			System.out.println("문자열 같음");
		} // 같은 문자열을 사용했으므로 문자열도 같음
		
		String str3 = new String("이동주");
		String str4 = new String("이동주");
		// str3과 str4는 new 구문을 사용하여 heap주소를 새로 만들어 문자열을 선언하여 각 주소를 참조함
		
		if(str3 == str4) {
			System.out.println("참조가 같음");
		}
		else {
			System.out.println("참조가 다름");
		}
		// 각자 새로 만든 주소를 참조하기 때문에 참조가 다름
		
		if(str3.equals(str4)) {
			System.out.println("문자열 같음");
		}
		// 하지만 문자열 자체는 같음

	}

}

str1과 str2를 비교
-> new 연산자를 사용하지 않고 문자열을 생성 시 기존의 heap 영역에 동일한 문자열이 있는지 확인
-> 동일한 문자열이 있을 경우 해당 문자열의 주소를 참조
-> str1과 str2는 같은 주소를 참조하고, 문자열도 모두 같음

str3과 str4를 비교
-> str3과 str4는 모두 new 연산자를 사용해 새로운 객체를 생성하고 그 객체에 값을 저장함
-> 각자 새로운 객체를 만들어 참조했으므로 참조하는 객체가 다름
-> 하지만 문자열은 같기 때문에 문자열을 비교했을 때는 true가 나옴

new 연산자

-> heap 영역에 메모리를 새로 만드는 구문! (값의 id 즉 주소를 새로 만드는 역할)

빈 문자열을 대입할 경우

-> 빈 문자열도 equals를 사용하여 비교할 수 있다
-> equals를 사용할 경우 equals("")로 사용해야한다!

package ch05.sec05;

public class EmptyStringExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String a = ""; // 빈 문자열도 생성 가능
		if(a.equals("")) { // 빈 문자열인지 확인함
			System.out.println("a 변수가 참조하는 String 객체는 빈 문자열");
		}
	}
}

.charAt()

문자열을 추출하는 데 사용함

-> 문자열에서 매개값으로 주어진 인덱스의 문자를 리턴해 특정 위치의 문자를 얻을 수 있음
-> 문자열의 위치를 정수의 형태로 출력함!

package ch05.sec05;

public class charAtExam {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String ssn = "0001213123456";
		char sex = ssn.charAt(6); //ssn의 문자열의 6번째 문자열을 추출하겠다.
		//charAt() : 문자열을 추출할 때 사용
		
		switch(sex) {
			case '1':
			case '3': // 문자열 값이 '1'이나 '3'일때
				System.out.println("남자");
				break;
			
			case '2':
			case '4': // 문자열 값이 '2'나 '4'일때
				System.out.println("여자");
				break;
		}

	}

}

.subString

문자열을 잘라내는데 사용

-> 문자열에서 매개값으로 주어진 인덱스의 문자를 리턴해 특정 위치의 두 가지 이상의 문자를 얻을 수 있음!

-> 형태
1) 변수.subString(a,b) : a번째부터 b의 바로 앞번째의 문자까지 추출
2) 변수.subString(a) : a번째부터 마지막 문자까지 추출

package ch05.sec05;

public class subStringExam {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String ssn = "000121-3234567";
		
		String firstNum = ssn.substring(0,2);
		
		System.out.println(firstNum);
		// ssn 문자열의 0번째부터 2번째 바로 전(1번째) 문자열까지 추출하는것!
		// 문자열변수.substring(a,b) : 해당 문자열의 a번째부터 b번째 바로 전까지의 문자를 추출!
		
		int firstNumInt = Integer.parseInt(ssn.substring(0, 2));
		// substring 자체가 문자열을 취급하기 때문에 정수 형태로 사용하기 위해서는 parseInt을 통해 int 값으로 변환해야함
		
		if(firstNumInt <= 25) { // firstNum이 25 이하일때
			System.out.println("20" + firstNum + "년생");
		}
		
		else if(firstNumInt > 25) { // firstNum이 25 초과일때
			System.out.println("19" + firstNum + "년생");
		}
		
		String secondNum = ssn.substring(7);
		// .substring(a) : 문자열의 a번째부터 마지막까지 출력
		System.out.println(secondNum);
	}

}

.length()

문자열 길이 측정

-> 문자열의 길이를 출력하는 함수로 정수 형태로 출력됨
-> 형태 : 변수.length()

package ch05.sec05;

public class lengthExam {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String ssn = "0001213123456";
		int length = ssn.length(); // 문자열의 길이 수를 추출함
		// .length() 문자열의 길이 수를 추출할 수 있음!
		
		if(length == 13) { // 문자열의 길이수가 13이면
			System.out.println("주민등록번호 자릿수");
		}
		else { //문자열의 길이수가 13이 아니면
			System.out.println("주민등록번호 아님");
		}

	}

}

.replace()

문자열을 대체하는 구문

-> 기존의 문자열을 새로운 문자열로 대체하여 출력하는 함수
-> 형태
변수.replace("기존 문자열", "새로운 문자열);

package ch05.sec05;

public class ReplaceExam {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String oldstr = "아 집에가고 싶다";
		String newstr = oldstr.replace("집", "학원");
		
		System.out.println(oldstr);
		System.out.println(newstr);

	}

}

.indexOf()

문자열을 찾는 구문

-> 특정 문자열의 위치를 찾고자 할 때 사용
-> 찾으려는 문자열의 시작점의 인덱스 번호를 출력함
-> 찾으려는 문자열이 없는 경우 -1을 출력함

.contains()

-> indexOf와 기능은 비슷하지만, 이쪽은 문자열을 찾는 기능만 가지고 있음 (리턴 기능 x)

package ch05.sec05;

public class indexOfExam {
	public static void main(String[] args) {
		String dj = "이동주는 남자다";
		
		int location = dj.indexOf("이동주"); 
        // 문자열 안에 "이동주"가 있는지 확인해 보는 구문
		// 문자열변수.indexOf() : 문자열 안에 해당 문자가 있는지 확인하고 해당 문자의 위치(시작점)을 정수로 리턴해주는 것
		System.out.println(location); 
        // "이동주"의 시작점은 0이므로 0이 출력됨
		String substring = dj.substring(0,3); 
        // "이동주"라는 문자열 추출
		System.out.println(substring); 
        // "이동주" 출력
		
		location = dj.indexOf("여자"); 
		// 해당 문자열에 "여자"라는 문자를 찾고 해당 문자의 위치를 정수로 리턴함
		// 만약에 찾는 문자열이 없을 경우 값은 -1이 도출됨
		
		if(location != -1) { 
        // 해당 문자열에 "여자" 가 있을 경우
			System.out.println("여자임");
		}
		else { // 해당 문자열에 "여자" 가 없을 경우
			System.out.println("여자가 아님");
		}
		
		boolean result = dj.contains("남자"); 
        // 해당 문자열에 "남자"가 있는지 찾아봄
		// 문자열변수.contains() : 문자열 안에 해당 문자가 있는지 찾는 기능 (값 리턴 기능 없음)
		// 확인 유무를 판단하는 구문이라 boolean 형태의 값을 가짐
		
		if(result) { //true
			System.out.println("남자 맞음");
		}
		else { //false
			System.out.println("남자가 아님");
		}
	}
}

.split()

문자열을 분리하는 기능의 함수

-> 특정 문자를 이용해 문자열을 분리하는 기능을 가지고 있음
-> 문자열을 나누기 전의 문자열을 참조 변수에 먼저 저장해야함
-> 문자열을 나누어 만들어진 문자열들을 각각의 문자열로 만드는 형태
-> 형태
변수.split("구분하고자 하는 문자");

package ch05.sec05;

public class SplitExam {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String team = "KIA/삼성/LG/두산/KT/SSG/롯데/한화/NC/키움";
		
		String[] tokens = team.split("/"); 
        // 해당 문자에서 문자 '/'을 기준으로 문자열로 나눔
		// 문자열변수.split(문자) : 해당 문자를 문자열로 나누는 구문으로 직접 지정한 문자를 기준으로 문자열로 나누는 것
		
		System.out.println("1위: " + tokens[0]); 
        // 해당 문자열의 첫 번째 값
		System.out.println("2위: " + tokens[1]); 
        // 해당 문자열의 두 번째 값
		System.out.println("3위: " + tokens[2]); 
        // 해당 문자열의 세 번째 값
		System.out.println();
		
		for(int i=0;i<tokens.length;i++) {
			System.out.println((i+1) + "위: " + tokens[i]);
		} 
		// 해당 배열의 길이만큼 출력을 할 것이기 때문에 배열의 길이를 알 수 있는 .length 구문을 쓰는 게 좋음! 
		// 해당 배열의 값을 모두 나타냄
		
		System.out.println();
		
		for(String str : tokens) {
			System.out.println(str);
		}
		// for (a:b)의 구조!
		// a는 임의의 변수 선언!
		// b는 배열에서 받은 값
		// b에서 받은 값을 a에 대입하고 하나하나씩 순서대로 출력해주는 것
		
		System.out.println();
		
		for(var str : tokens) {
			System.out.println(str);
		}
		// var : 자동으로 타입을 파악하는 함수

	}

}
profile
끄작끄작

0개의 댓글