티스토리 뷰

tring : char[]

참조타입 중 유일하게 기본타입의 특징을 가지고 있다.

 

StringPool : 기본타입으로 만들었을 때 heap 영역에 있는 StringPool에 literal 이 생성돼 값이 둥둥 떠다닌다.

 

immutable : String 값 수정시 그 값 자체가 변경되는 것이 아니라 새로운 값이 생성되고, 그 값으로 참조를 바꿈

 

String Concatenation : 어떠한 타입도 문자열을 만나면 문자열 타입으로 바뀐다.

 

코드를 통해 String 타입의 사용법을 살펴보겠다.

package com.test01;

public class MTest {

	static String str = "The String class represents character strings.";

	public static void main(String[] args) {
		String s = "Hello";
		System.out.println(1 + 2 + s);
		System.out.println(s);
		s = s + 1 + 2;
		System.out.println(s);
		// String concatenation

//		 1. str의 전체 길이 (출력)
		System.out.println("1. str의 전체 길이 (출력)");
		System.out.println(str.length());
		System.out.println();

//		 2. str 전체 대문자로 바꿔서
		System.out.println("2. str 전체 대문자로 바꿔서");
		System.out.println(str.toUpperCase());
		System.out.println();
		
//		 3. str 전체 소문자로 바꿔서
		System.out.println("3. str 전체 소문자로 바꿔서");
		System.out.println(str.toLowerCase());
		System.out.println();
		
//		 4. str에서 첫번째로 나오는 c의 인덱스를
		System.out.println("4. str에서 첫번째로 나오는 c의 인덱스를");
		System.out.println(str.indexOf('c'));
		System.out.println();
		
//		 5. class -> java 로 바궈서
		System.out.println("5. class -> java 로 바궈서");
		str = str.replace("class", "java");
		System.out.println(str);
		System.out.println();
		
//		 6. character 찾아서 대문자로 변환 후, 변환된 내용으로 전체 출력

		System.out.println("6. character 찾아서 대문자로 변환 후, 변환된 내용으로 전체 출력");
		str = str.replace("character", str.substring(str.indexOf("character"), str.indexOf("character") + 9).toUpperCase());
		System.out.println(str);
		System.out.println();
		
		//이렇게 풀수도 있다!!
//		String target = "character";
//		int start = str.indexOf(target);
//		int end = start + target.length();
//		
//		String upper = str.substring(start, end).toUpperCase();
//		
//		System.out.println(str.replace(target, upper));
		
//		 7. str을 char[] 로 출력하되, 'c' 만 출력하자. 그리고 c의 갯수도 출력하자

		System.out.println("7. str을 char[] 로 출력하되, 'c' 만 출력하자. 그리고 c의 갯수도 출력하자");
		char[] str_c01 = str.toCharArray();
		int num1 = 0;
		for (int i = 0; i < str_c01.length; i++) {
			if (str_c01[i] == 'c' || str_c01[i]	== 'C') {
				System.out.print(str_c01[i] + " ");
				num1++;
			}
		}
		System.out.println(num1);
		System.out.println();
		
//		 8. str을 char[] 로 출력하되, 대문자만, 그리고 대문자의 갯수도

		System.out.println("8. str을 char[] 로 출력하되, 대문자만, 그리고 대문자의 갯수도");
		char[] str_c02 = str.toCharArray();
		int num2 = 0;
		for (int i = 0; i < str_c02.length; i++) {
			if (Character.isUpperCase(str_c02[i])) {
				System.out.print(str_c02[i] + " ");
				num2++;
			}
		}
		System.out.println(num2);
		System.out.println();
		
//		 9. str 안의 모든 공백 제거 후 출력

		System.out.println("9. str 안의 모든 공백 제거 후 출력");
		str = str.replace(" ", "");
		//str.replaceAll(" ", "");	// regex 를 이용해 자를수도 있다. (replace랑 차이점)
		System.out.println(str);
		System.out.println();
		
//		 10. 전체 역순으로 출력

		System.out.println("10. 전체 역순으로 출력");
		for (int i = str.length() - 1; i >= 0; i--) {
			System.out.print(str.charAt(i));
		}
		System.out.println();
	}
}

String Buffer :

mutable : 값이 변한다 -> 수정해도 heap 영역에 새로운 값이 생성되는 것이 아니라 원본 값 자체가 수정된다.

package com.test02;

public class MTest {

	public static void main(String[] args) {
		stringTest();
		//stringBufferTest();
	}

	private static void stringBufferTest() {
		// StringBuffer = mutable : 값이 변한다.
		// -> 수정해도 heap 영역에 새로운 값이 생성되는 것이 아니라 원본 값 자체가 바뀐다.
		// -> hashcode 값이 수정 후에도 동일하다!!
		StringBuffer sb = new StringBuffer();

		sb.append("안녕하세요.");
		System.out.println(sb);
		System.out.println(" : hashCode -> " + sb.hashCode());

		// method chaining -> 메소드.메소드.메소드 이런식으로 연결하는 걸 말한다~!
		sb.append(" 저는 ").append("조현준 입니다.");
		System.out.println(sb);
		System.out.println(" : hashCode -> " + sb.hashCode());
	}

	private static void stringTest() {
		// String = immutable : 불변 객체
		// -> 수정시 스트링 풀에 새로운 literal이 생성
		// -> 수정 후에 hashcode 주소값이 변함!!
		String s = "안녕하세요.";
		System.out.println(s);
		System.out.println(" : hashCode -> " + s.hashCode());

		s += " 저는 ";
		System.out.println(s);
		System.out.println(" : hashCode -> " + s.hashCode());
		
		s += "조현준 입니다.";
		System.out.println(s);
		System.out.println(" : hashCode -> " + s.hashCode());

		
		// replace 로 수정했지만 수정한 값을 변수에 대입하지 않아서 변수는 원본을 참조하고 있고, 
		//수정본은 string pool 에 아무도 참조하지 않은 상태로 둥둥 떠있다.
		s.replace("안녕하세요.", "하이!");
		System.out.println(s);

		s = s.replace("안녕하세요.", "하이!");
		System.out.println(s);
	}
}

 

String Cutter

String의 메서드를 통해 문자열을 잘라낼 수 있다. 강력한 메서드 몇가지를 코드를 통해 살펴보겠다.

package com.test02;

import java.util.StringTokenizer;

public class StringCutter {

	public static void main(String[] args) {

		String str = "The String class represents character strings.";

		// 1. substring 메서드로 자르기!!
		System.out.println(str.substring(4, 10));

		// 2. Split 메서드로 자르기!!
		String[] tmp = str.split(" ");
		System.out.println(tmp[1]);
		
		// 3. StringTokenizer : split 이랑 비슷한데 잘라서 자기가 가지고 있다가 
		String str2 = "represents.character.strings.";
		StringTokenizer st = new StringTokenizer(str2, ".");
		while(st.hasMoreElements()) {
			//System.out.println(st.nextToken());
			System.out.println(st.countTokens());
			System.out.println(st.nextElement());
		}
		
		
	}
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함