[JAVA] String 메서드 모음

손지민·2023년 8월 23일

Java 기초

목록 보기
5/13
post-thumbnail
💡 목차

문자열의 처리

자바에서는 문자열 처리를 위하여 다음의 클래스를 이용합니다.

  • String -변하지 않는 문자열
  • StringBuffer(StringBuilder) - 변하는 문자열

String 은 원래 참조자료형이라서 new 연산자에 의해서 객체를 생성하고 사용해야 하지만

기본자료형처럼 사용할 수도 있어요.

`charAt(int index)`

charAt(인덱스) -문자열 데이터에 인덱스 자리에 있는 글자 하나를 반환합니다.
인덱스는 0번째부터 시작합니다.
공백도 하나의 문자로 처리합니다.

package exam01;
/*
charAt(인덱스) -문자열데이터에 인덱스 자리에 있는 글자 하나를 반환합니다.
 * 인덱스는 0번째부터 시작합니다.
 * 공백도 하나의 문자로 처리합니다.
*/
public class Test02 {

	public static void main(String[] args) {
		String data=new String("hello java");
		char a = data.charAt(0);
		char b = data.charAt(4);
		char c = data.charAt(5); // 빈칸도,공백도 하나의 문자로 처리
		char d = data.charAt(6);
		System.out.println("l"+a+"l"); //1h1
		System.out.println("l"+b+"l"); //1o1
		System.out.println("l"+c+"l"); //1 1
		System.out.println("l"+d+"l"); //1j1
	}
}

`length()`

매개변수 따로 필요하지않고 문자열의 길이를 반환하는 메소드.

공백도 문자 길이에 포함됩니다.

package exam01;

/*int length()
 * 공백도 글자 길이에 포함됩니다.
 */

public class StringLengthTest {
	public static void main(String[] args) {
		String data=new String("Hello Korea "); //12
		int n = data.length();
		System.out.println(n);
	}
}

`trim()`

문자열의 앞과 뒤에 있는 공백을 제거한 새로운 문자열을 반환하는 메소드.

String 원본 data가 바뀌지 않음. 새로운 문자열 만들어서 새로운 객체 만드는 것.

package exam01;

/*
 	String trim()
 	-문자열의 앞과 뒤에 있는 공백을 제거한 새로운 문자열을 반환합니다.
 	String = 변하지 않는 문자열.
 */

public class TrimTest {
	public static void main(String[] args) {
		String data= new String("   Hello java   ");
		
		String data2=data.trim();  
		//data는 변하지 않음. 새로운 문자열 만들고 data2에 담았다는 뜻.
		//String 은 변하지 않는 문자열. 원래꺼가 바뀌는게 아니라 새로운 객체를 만드는 것.
		int n2=data2.length();
		System.out.println(n2); //10
		System.out.println("|"+data2+"|"); //
		int n = data.length();
		System.out.println(n); //16
		System.out.println("|"+data+"|");
	}
}

`toUpperCase() /toLowerCase()`

모두 대문자/ 모두 소문자

package exam01;

public class UpperLowerTest {
	public static void main(String[] args) {
		String data= new String("Hello java");
		String data1=data.toLowerCase();  //모두 소문자
		String data2=data.toUpperCase(); //모두 대문자
		System.out.println(data);
		System.out.println(data1);
		System.out.println(data2);
	}

}

`equals(Object anObject)`

두 개의 문자열이 서로 같은 문자열, 같은 데이터를 갖고 있는지 판별하기 위해서 확인.

(==은 같은 메모리를 갖고 있니?)
//boolean equals(object)
//문자열이 같으면 true 그렇지 않으면 false 를 반환합니다.
//참조 변수라서 ’==’ 연산자를 문자열 변수에 사용하면 같은 메모리를 바라보고 있니?
//같은 객체를 참조하고 있는지 판별합니다. 따라서 다름.
//따라서, 같은 문자열 데이터를 갖고있는지 판별하려면 equals메소드를 사용해야함.

package exam01;

//boolean equals(object)
//문자열이 같으면 true 그렇지 않으면 false 를 반환합니다.
//참조변수라서 == 연산자를 문자열 변수에 사용하면 같은 메모리를 바라보고 있니?
//같은 객체를 참조하고 있는지 판별합니다. 따라서 다름.
//따라서, 같은 문자열 데이터를 갖고있는지 판별하려면 equals메소드를 사용해야함.

public class Equals {
	public static void main(String[] args) {
		String data1 = new String("hello");
		String data2 = new String("hello");
		if (data1.equals(data2)) {
			System.out.println("같다");
		}else {
			System.out.println("다르다");
		}
		
//		if (data1==data2) {
//			System.out.println("같다");
//		}else {
//			System.out.println("다르다");
//		}
		
	}
}

종합 연습 trim, toLowerCase, equals

package exam01;

public class Test04 {
	public static void main(String[] args) {
		String []data= {"kim","tiger","Tiger","  tiger","lee","TIGER  "};
		//문자열 배열 안에 타이거가 모두 몇명이 있는지 파악하는 프로그램
		int cnt = 0;
		
		for(String name:data) {
			if(name.trim().toLowerCase().equals("tiger")) {
				cnt++;
			}
		}
		System.out.println(cnt);
	}
}

`equalsIgnoreCase(String anotherString)`

대소문자 구분 없이 판별(띄어쓰기 차이는 무시 안하고 비교)

package exam01;

public class Test05 {
	public static void main(String[] args) {
		String []data= {"kim","tiger","Tiger","  tiger","lee","TIGER  "};
		//문자열 배열 안에 타이거가 모두 몇명이 있는지 파악하는 프로그램
		int cnt = 0;
		
		for(String name:data) {
			if(name.trim().equalsIgnoreCase("tiger")) {
				cnt++;
			}
		}
		System.out.println(cnt);
	}
}
  • 연습 - 암호,암호 확인 입력받아 확인
package exam01;

import java.util.Scanner;

/*
 * 암호와 암호확인을 입력받아 서로 같은지 판별하고 또 암호의 길이가 6자 이상인지 판별하는 프로그램을 작성
 * if 합쳐서 한번에 확인
 */

public class Test08 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String pwd;
		String chkPwd;
		System.out.println("암호를 입력하세요 : ");
		pwd = sc.next();
		System.out.println("암호 확인을 입력하세요 : ");
		chkPwd = sc.next();
		
		int n = chkPwd.length(); //String 길이 확인
		if(pwd.length()<6 || !pwd.equals(chkPwd)) {
			System.out.println("암호가 잘못되었습니다. 암호를 확인해주세요.");
			return;
		}
		System.out.println("올바른 암호입니다.");
		System.out.println("암호"+pwd);
	}
}
  • 연습 - 입력 받은 데이터가 숫자를 포함하고 있는지 확인
package exam01;

import java.util.Scanner;

public class Test09 {
	/*
	 * 문자열 데이터를 매개변수로 전달받아 그 문자열 안에 숫자가 있는지 판별하여
	 * boolean 을 반환하는 메소드를 정의 
	 */
	public static boolean isContainDigit(String data) {
		boolean flag=false;
		for(int i=0;i<data.length();i++) {
			char ch=data.charAt(i);
			if(ch>='0' && ch<='9') {//하나의 문자는 작은따옴표
				flag = true;
				break;
			}
		}
		return flag;
	}
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String data;
		System.out.println("문자열을 입력하세요.");
		data = sc.next();
		if(isContainDigit(data)) {
			System.out.println("숫자를 포함하고 있어요");
		}else {
			System.out.println("숫자를 포함하고 있지 않습니다.");
		}
	}
}
  • 연습- 문자열이 특수 문자 포함하는지
package exam01;

import java.util.Scanner;

/*
 * 문자열 데이터를 매개변수로 전달 받아 그 문자열 안에 특수문자가 있는지 판별
 * (!@#$%^&*(),.)를 포함하고 있는지 판별하는 메소드를 만들고
 * 테스트 해보기.
 */

public class Test10 {
	
	public static boolean isContainSpecial(String data) {
		char []sp= {'!','@','#','$','%','^','&','*','(',')',',','.'};
		
		boolean flag = false;
		
		for (int i=0;i<data.length();i++) {
			char ch = data.charAt(i);
			for(int j =0;j<sp.length;j++) {
				if(ch==sp[j]){
					return true;
				}
			}
		}
		return flag;
	}
	public static void main(String[] args) {
		Scanner sc= new Scanner(System.in);
		String data;
		System.out.println("문자열을 입력하세요 : ");
		data = sc.next();
		if(isContainSpecial(data)) {
			System.out.println("특수문자 포함"+data);
		}else {
			System.out.println("특수문자 미포함"+data);
		}
	}
}
  • 암호 연습-6자리 이상, 동일한지, 숫자 있는지, 특수 문자 있는지
package exam01;

import java.util.Scanner;

/*
 * 사용자한테 암호와 암호확인을 입력받아 6자 이상이고, 암호확인이 동일하고, 숫자, 특수문자를 포함하는지 판별 프로그램
 */

public class Test11 {
	
	public static boolean isContainDigit(String data) { //숫자 있나 판단.
		boolean flag=false;
		for(int i=0;i<data.length();i++) {
			char ch=data.charAt(i);
			if(ch>='0' && ch<='9') {//하나의 문자는 작은따옴표
				flag = true;
				break;
			}
		}
		return flag;
	}
	
	public static boolean isContainSpecial(String data) { //특수문자 있나 판단
		char []sp= {'!','@','#','$','%','^','&','*','(',')',',','.'};
		
		boolean flag = false;
		
		for (int i=0;i<data.length();i++) {
			char ch = data.charAt(i);
			for(int j =0;j<sp.length;j++) {
				if(ch==sp[j]){
					return true;
				}
			}
		}
		return flag;
	}
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String pwd, chkPwd;
		System.out.println("암호를 입력하세요 : ");
		pwd = sc.next();
		System.out.println("암호 확인을 입력하세요 : ");
		chkPwd = sc.next();
		
		if(pwd.length()>=6 && pwd.equals(chkPwd)&&isContainDigit(pwd)&&isContainSpecial(pwd)) {
			System.out.println("올바른 암호");
		}else {
			System.out.println("올바르지 않은 암호");
		}
		
/*		//int n = chkPwd.length(); //String 길이 확인
		if(pwd.length()<6 || !pwd.equals(chkPwd)) { //6자리 이상, 같은지판단
			System.out.println("암호가 잘못되었습니다. 암호를 확인해주세요.");
			return;
		}
		
		if(!isContainSpecial(pwd)||!isContainDigit(pwd)) { //특수문자 있는지
			System.out.println("암호가 잘못되었습니다. 암호를 확인해주세요.");
			return;
		}

		System.out.println("올바른 암호입니다.");
		System.out.println("암호"+pwd);
*/
		
	}
}

`indexOf(String str)`

문자를 넣으면 index 를 반환. 글자의 위치를 찾기.

활용 - 위치를 찾는 용도+문자열 데이터 안에 특정 문자를 포함하고 있는가 판별

문자열은 큰따옴표, 문자 하나는 작은따옴표

`lastIndexOf(int ch)`

찾기를 끝에서부터 찾는다.

package exam01;

public class IndexOfTest {
	public static void main(String[] args) {
		String data= "Hello Korea java";
		int n = data.indexOf('e');
		int n2 = data.indexOf("e");
		//e가 맨처음 나오는 위치를 알려줘.
		System.out.println(n);
		System.out.println(n2);
		System.out.println("--------------------");
		int n3=data.lastIndexOf('e');
		int n4=data.lastIndexOf("e");
		//찾기를 끝에서부터  찾는다.
		System.out.println(n3);
		System.out.println(n4);
		System.out.println("--------------------");
		int n5=data.indexOf("Korea");
		System.out.println(n5);
		int n6=data.indexOf("kim");
		System.out.println(n6);
	}
}
package exam01;

/*
 * 입력한 문장에 hello 를 포함하고 있는지 판별
 */

import java.util.Scanner;

public class IndexOfTest02 {
	public static void main(String[] args) {
		Scanner sc= new Scanner(System.in);
		String data;
		System.out.println("문장을 입력하세요 :");
		data = sc.nextLine(); //넥스트 라인 문장,공백 입력받기 가능
		System.out.println(data);
		
		
		if(data.indexOf("hello")!=-1) {
			System.out.println("hello 포함");
		}else {
			System.out.println("hello 미포함");
		}
		
//		int n=data.indexOf("hello");
	//	System.out.println(n);
	}
}

`substring(int beginIndex) / **substring**(int beginIndex, int endIndex)`

비긴인덱스 글자 자리 데이터는 포함

엔드인덱스 글자 자리 데이터는 포함 안하고 그 앞에까지만 포함

package exam01;

public class SubStringTest {
	public static void main(String[] args) {
		String data=new String("hello java");
		String data1=data.substring(3, 7);
		System.out.println(data1);
		String data2=data.substring(3);
		System.out.println(data2);
	}
}
  • 연습 : 주민번호 받아서 나이 출력- substring
package exam01;

import java.util.Date;
import java.util.Scanner;
/*
 * 주민번호 입력받아 나이를 구하여 출력
 */
public class SubStringTest04 {
	public static void main(String[] args) {
		Scanner sc= new Scanner(System.in);
		String jumin;
		System.out.println("주민번호(하이픈 포함)를 입력하세요.");
		jumin=sc.next();
		int yy=Integer.parseInt(jumin.substring(0, 2));
		//800101-1234567
		
		int gender=Integer.parseInt(jumin.substring(7, 8));
		if(gender==1||gender==2) {
			yy+=1900;
		}else {
			yy+=2000;
		}
		
		Date today=new Date();
		int thisYear=today.getYear()+1900;  //겟이어보다 다른거 쓰는거 좋겠다고 선그어짐.
		int age=thisYear-yy+1;
		System.out.println("주민번호"+jumin);
		System.out.println("출생연도"+yy);
		System.out.println("올해연도"+thisYear);
		System.out.println("나이"+age);
		
	}
}

integer.parseInt

String 숫자를 int 숫자로 바꿈.

`replace(char oldChar, char newChar)`

원래 문자 변동 없고 바뀌어진 새로운 문자 반환

package exam01;

public class ReplaceTest {
	public static void main(String[] args) {
		String data=new String("hello java hello Korea");
		String data2=data.replace("hello", "hi");
		System.out.println(data);
		System.out.println(data2);
	}
}

`split(String regex)`

문자열을 특정 단어나 글자로 분리해주는 역할

  • split 메소드는 문자열을 지정된 구분자(delimiter)를 기준으로 나누어 배열로 반환합니다.
package exam01;

public class SplitTest {
	public static void main(String[] args) {
		String data="홍길동,이순신,유관순,김유신";
		String []arr=data.split(",");
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr[3]);
	}
}

`valueOf(boolean b)`

기본 자료형을 String으로 만들고 싶을 때 사용

package exam01;

public class ValueOfTest {
	
	public static void pro(String data) {
		System.out.println("처리완료 : "+data);
	}
	
	public static void main(String[] args) {
		int age =20;
		boolean flag=true;
		double height=178.9;
		pro(age+"");
		pro(flag+"");
		pro(height+"");
		//실제로는 이걸 더 많이 씀

		//윈칙은 아래
//		pro(String.valueOf(age));
//		pro(String.valueOf(flag));
//		pro(String.valueOf(height));
	}
}

`startsWith(String prefix)`

특정 문자로 시작하는가?

`endsWith(String suffix)`

특정 문자로 끝나는가?

profile
Developer

0개의 댓글