[Java] 자바의 문자열(String) 함수 정리 :: 매운코딩
728x90
300x250

예전에 네이버 블로그 할때 포스팅 했던 것을 옮겨놓았다.

 

Java의 String 객체는 내장함수가 굉장히 많다~~

어떤게 있는지 알아보자!! 문자열함수 마스터하자~

1. equals()

equals는 두개의 문자열이 동일한 값을 가지고 있는지를 비교하여 결과값을 리턴한다.

사용형태 a.equals(b) .. 실제 문자열이 가지고 있는 내용을 비교하는 것이다.

a==b 와는 다르다 a==b는 문자열변수의 주소값을 비교하는 것.

다음은 equals와 == 연산자의 차이점을 보여주는 예시!이다!! 초콜렛과 파스타가 먹고싶으니 이걸로 ㅎㅎ

public static void fun1() {
		
		String a = "CHOCOLATE";
		String b = a;
		String c = "CHOCOLATE";
		String d = new String("CHOCOLATE");
		String e = "PASTA";
		
		System.out.println(a==b);			//true
		System.out.println(a.equals(b));	//true
		
		System.out.println(a==c);			//true
		System.out.println(a.equals(c));	//true
		
		System.out.println(b==c);			//true
		System.out.println(b.equals(c));	//true
		
		System.out.println(a==d);			//false
		System.out.println(a.equals(d));	//true
				
		System.out.println(a==e);			//false
		System.out.println(a.equals(e));	//false
	}

여기서 잠깐, a와 c는 새로만든 것이라서 다른 주소값을 가리킬텐데 왜 a==c 도 true가 나오는 건가에 대한 의문증을 가질 수 있다. 기본적으로 JAVA는 로컬함수(같은 제어블록)내에서 같은 문자열이 나오면 공유상수pool에서 관리를 하기 때문에 새로 메모리를 잡지않고 원래있던 주소로 배정을 해준다!

 

 

2. indexOf

indexOf는 문자열에서 특정 문자가 시작되는 인덱스를 리턴한다.

		String str1 = "문자열을 공부해봅시다. 화이팅!";
		String str2 = "abcdef";
		String str3 = "chocolate#cake#macaron";
		
		System.out.println(str1.indexOf("공부"));		//5
		System.out.println(str2.indexOf("b"));		//1
		

이렇게 "공부" 두글자를 indexOf에 넣어주어도 앞글자인 '공'이라는 것이 먼저나오는 인덱스를 리턴해준다. 인덱스는 0부터 시작하눈거...다들 아실테니 패스패스~ 아, ' ' 공백문자도 문자로인식해서 별도의 문자로 넣는다.

3. length()

문자열의 길이를 반환한다.

		String str1 = "문자열을 공부해봅시다. 화이팅!";
		String str4 = "ILoveYoU";
		
		System.out.println(str4.length()); //8
		System.out.println(str1.length()); //17

 

4. substring

substring은 문자열 중 특정 부분을 뽑아낼 경우에 사용한다.

		String str1 = "문자열을 공부해봅시다. 화이팅!";
		String str2 = "abcdef";
		String str3 = "chocolate#cake#macaron";
		
		System.out.println(str1.substring(5)); //공부해봅시다. 화이팅!
		System.out.println(str1.substring(5, 8)); //공부해

substring의 사용방법은 2가지가 있다.

substring(int startindex)은 자를 문자열의 시작지점만 알려주면 시점부터 해당 문자열의 끝까지가 나온다.

substring(int startindex, int endindex)는 자를 문자열의 시작점과 자를 문자열의 끝+1 이 들어간다.

예를 들어 5,8을 넣으면 인덱스 5,6,7에 해당하는 문자열만 뽑아지는 것 !! 이점 유의하십시요

5. toUpperCase() 와 toLowerCase()

toUpperCase는 문자열을 모두 대문자로 변경하고자 할 때 사용한다. (모두 소문자로 변경할때는 toLowerCase를 사용하면 된다.) 당연히 영어 한정이다^^

		String str1 = "문자열을 공부해봅시다. 화이팅!";
		String str2 = "abcdef";
		String str3 = "chocolate#cake#MACARON";
		String str4 = "ILoveYoU";
		
		System.out.println(str1.toUpperCase()); // 문자열을 공부해봅시다. 화이팅!
		System.out.println(str2.toUpperCase()); // ABCDEF
		System.out.println(str4.toLowerCase()); // iloveyou
		System.out.println(str4.toUpperCase()); // ILOVEYOU

 

 

6. concat()

문자열과 문자열을 이어주고자(합치고자) 할 때 사용한다.

		String str1 = "문자열을 공부해봅시다. 화이팅!";
		String str4 = "ILoveYoU";
		
		System.out.println(str1.concat(str4)); //문자열을 공부해봅시다. 화이팅!ILoveYoU
        System.out.println(str1+str4);

C언어 strcat()함수와 거의 동일한기능이다. 그리고 사실 JAVA는 문자열 + 문자열 이렇게 해주기만해도 concat과 같은 기능을한다. 그래서 거의 concat을 사용하는 경우는 드물지..싶다.. (나도 거의 안써봤는데 혹시 concat을 써야하는 특별한 케이스가 있는걸까?????)

7. startWith()

문자열이 지정한 문자로 시작하는지

판단 후 있으면 true반환, 없으면 false를 반환한다.대소문자를 구별한다!

		String str1 = "문자열을 공부해봅시다. 화이팅!";
		String str2 = "abcdef";
		
		System.out.println(str1.startsWith("문")); //true
		System.out.println(str1.startsWith("공")); //false
		System.out.println(str2.startsWith("a")); //ture

 

8. endWith()

문자열 마지막에 지정한 문자가 있는지를 판단후 있으면 true, 없으면 false를 반환한다. 대소문자를 구별한다!

		String str4 = "ILoveYoU";
		
		System.out.println(str4.endsWith("U")); //true
		System.out.println(str4.endsWith("u")); //false
		System.out.println(str4.endsWith("a")); //false

 

9. replaceAll

replaceAll은 문자열 중 특정 문자를 다른 문자로 바꾸고 싶을 경우에 사용한다.

		String str1 = "문자열을 공부해봅시다. 화이팅!";
		String str2 = "abcdef";
		String str3 = "chocolate#cake#macaron";
		
		System.out.println(str1.replaceAll("문자열","자료구조들")); 			//자료구조들을 공부해봅시다. 화이팅!
		System.out.println(str3.replaceAll("chocolate", "strawberry"));  

 

10. replace

특정 문자를 원하는 문자로 변경하고 싶을 경우에 사용한다.

replace(바꾸려고하는 기존 문자열, 새로바꿀 문자열) 의 형태로 사용하면 된다.

		String str3 = "chocolate#cake#MACARON";
		String str4 = "ILoveYoU";
		
		System.out.println(str3.replace("#", "%")); //chocolate%cake%MACARON

#이 %로 바뀐것을 확인할 수 있다~

(+) replace와 replaceAll의 차이점

replace는 첫번째 인자값을 보시면 문자열이 들어갑니다. 문자열만 변환가능한데 반해서

replaceAll은 첫번째 인자값에 정규식이 들어갑니다. 정규식에 대해 잘 모르시는 분도 계시겠지만 이부분은 나중에 더 자세히 알아보겠습니다. 정규식을 이용하면 불특정 문자열을 변환할수 있는 장점이 있습니다.

String str = "aaabbbccccabcddddabcdeeee";

 

String result1 = str.replace("abc", "왕");

String result2 = str.replaceAll("[abc]", "왕");

 

System.out.println("replace result->"+ result1);

System.out.println("replaceAll result->"+ result2);

 

결과값

replace result->aaabbbcccc왕dddd왕deeee

replaceAll result->왕왕왕왕왕왕왕왕왕왕왕왕왕dddd왕왕왕deeee

 

11. split()

지정한 문자로 문자열을 나눌수 있다. 나눠진 부분들의 결과 값은 배열로 반환한다.

		String str3 = "chocolate#cake#MACARON";

		String[] sp = str3.split("#");
		for(int i=0;i<sp.length;i++) {
			System.out.println(sp[i]);
		}

- split의 결과값

chocolate
cake
MACARON

12. trim()

문자열의 시작과 끝에 있는 공백을 없애준다. 중간 공백은 없애주지 않는다.

		String str5 = "       H e llo  ";
		
		System.out.println(str5.trim()); //H e llo

 

 

13. compareTo

두개의 String를 앞에서부터 순사적으로 비교하다가 틀린부분이 있으면 비교하는 String에 캐릭터값을 반환한다.대소문자를 구별한다. ASCII코드의 값을 기준으로 비교를 하고, 같으면 0을 반환한다!

다르다면 기준이 되는 것으로부터 아스키코드의 범위 값을 리턴한다. a 과 e를 비교할때 a기준에서 e는 b,c,d,e 이렇게 4개의 갭이 있으니까 4가 반환되는 것이다.

+/-의 유무가 헷갈린다면 (기준이 되는 아스키코드 - 비교되는 아스키코드)로 생각하면 편하다.

예를들어 a는 아스키코드 97이니까 "a".compareTo("b")를 하면 a - b과 같고 97 - 98 = -1 이 되는 셈이다.

	String str5 = "A";
		String str6 = "a";
		String str7 = "b";
		String str8 = "e";
		String str9 = "e";
		
		
		System.out.println(str6.compareTo(str7)); //-1
		System.out.println(str5.compareTo(str6)); //-32
		System.out.println(str8.compareTo(str9)); //0
		System.out.println(str6.compareTo(str8)); //-4
		System.out.println(str8.compareTo(str6)); //4

 

14. contains

두개의 String을 비교해서 비교대상 String을 포함하고 있으면true, 다르면 false를 반환한다.

		String str5 = "abcd"; 
		String str6 = "c"; 

		System.out.println(str5.contains(str6)); //true

 

15. charAt

지정한 index번째에 문자를 반환한다.

		String str1 = "문자열을 공부해봅시다. 화이팅!";
		String str2 = "abcdef";
		
		System.out.println(str1.charAt(2)); //열
		System.out.println(str2.charAt(0)); //a

 

 

 

[참고한 사이트]

https://sks3297.tistory.com/entry/자바-문자열-함수 [SIM's Review]

https://djusti.tistory.com/8

https://blog.naver.com/eun2ee/221495754814

728x90

+ Recent posts