티스토리 뷰
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());
}
}
}
'JAVA > JAVA Theory' 카테고리의 다른 글
[JAVA] [OOP] 14. CLASS : Class 의 개념, Instance 의 개념 (0) | 2019.11.16 |
---|---|
[JAVA] [OOP] 14. CLASS : Object Oriented Programming (0) | 2019.11.16 |
[JAVA] 12. Array(배열) (0) | 2019.11.16 |
[JAVA] 11. Java.lang.Math.random() & Java.util.Random (0) | 2019.11.16 |
[JAVA] 10. Java.util.Scanner (0) | 2019.11.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 다형성
- 추상화
- select
- ojdbc6.jar
- java 환경설정
- jdbc
- Oracle
- .
- java
- INSERT
- view
- Update
- 객체
- Scott/Tiger
- 상속
- JDBC 프로그램 작성단계
- model
- 캡슐화
- controller
- MVC
- OOP
- 객체지향
- JdbcTemplate
- Delete
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함