티스토리 뷰

 

 

 

1. 참조 자료형 String

클래스 자료형으로 선언. 초기화 가능.

문자열 저장 클래스로 쌍따옴표(" ") 사용.

 

(1) String 객체 생성 방법

String 참조변수명 = new String("문자열");

└new : 항상 새로운 객체를 만듦.

String 참조변수명 = "문자열";

└문자열이 같으면 하나의 객체를 공유

 

_예시)

String str1 = "Java";
String str2 = "Java";
String str3 = new String("Java");
String str4 = new String("Java");
String str5 = str4;

//1
System.out.println(str1);  // Java
System.out.println(str2);  // Java
System.out.println(str3);  // Java
System.out.println(str4);  // Java
System.out.println(str5);  // Java

//2
System.out.println(str1 == str2);  //true
System.out.println(str2 == str3);  //false
System.out.println(str3 == str4);  //false
System.out.println(str4 == str5);  //true

//3
str5 = "Java Program";  // str5 새로운 객체 만들어 값 초기화. 기존의 Java는 연결이 끊겨 가비지
System.out.println(str4);  //Java
System.out.println(str4 == str5);  //false

-str1과 str2는 문자열이 같아 하나의 객체를 공유

-new 키워드는 항상 새로운 객체르 만드므로 str4 != str5

-3 : str5에 새로운 값을 대입하면 새로운 객체 생성되어 값 대입. 기존의 값(Java)와 연결이 끊기며 가비지(Garbage)

 

 

(2) String 특징

-리터럴을 바로 입력한 데이터는 문자열이 같은 경우 하나의 객체를 공유

String str1 = "java";
String str2 = "java";

 

-객체 내 값 변경 불가능

값을 변경하면 새로운 객체를 생성하여 값 대입(초기화)

String str1 = "java";     //첫번째 객체 : java
String str1 += "program"; //두번째 객체 : javaprogram
String str1 += "1.8";     //세번째 객체 : javaprogram1.8

기존의 값에서 갱신되는 게 아니라 새로운 객체 생성해서 저장.
└객체랑 변수 연결이 끊어져 가비지(garbage) 생성.
└문자열 연산할 때, 가비지 많이 생성됨. 계속 새로운 객체를 만들기 때문에.

String str1 = new String("안녕");
String str2 = str1;
str1 = "안녕하세요";  //값 갱신이 아니라 새로운 객체 생성

2. 문자열 연산

(1) Plust Operator(더하기 연산)

-Type_1 : 문자열 + 문자열 : 문자열 연결

String str = "Hello" + " java " + "world" + " !";
System.out.println(str); // 결과 : Hello java world !

└각 배열 요소 : Hello, java, world, !를 플러스 연산(연결)

  Hello java → Hello java world → Hello java world!(최종 결과값)

  각각 새로운 객체로 저장. 가비지 발생.

 

-Type_2 : 기본 자료형 + 문자열 : 기본자료형을 문자열 변환 → 문자열 연결

System.out.println(1+"안녕"); //1안녕
System.out.println(1+"안녕"+2); //1안녕2
System.out.println("안녕"+1+2); //안녕12
System.out.println(1+2+"안녕"); //3안녕

└정수 자료형이 문자형으로 바뀌어 연산

 

(2) 문자열 길이 : length();

공백 포함. 주로 배열의 반복문 조건식에서 많이 쓰임.

String str = "Hello java world";
System.out.println(str.length()); //결과값 16(공백 count)

 

(3) 문자열 검색 : charAt(), indexOf(), lastIndexOf()

-Type_1 : charAt(); : String 문자열 중 한 글자를 선택char 타입으로 변환

String str = "Hello java world";

System.out.println(str.charAt(0)); //str 문자열에서 인덱스 0번 가져오겠다. - H
System.out.println(str.charAt(1)); //str 문자열에서 인덱스 1번 값 가져오겠다. - e

 

-Type_2 : indexOf(), lastIndexOf() - 특정 문자 위치 찾기

찾는 방향이 순방향인지 역방향인지 차이일뿐 인덱스 번호가 바뀌는 것은 아님.

결과값이 -1이면 찾고자 하는 문자가 문자열 내에 없다.

String str = "Hello java world";

System.out.println(str.indexOf("p"));  //결과값 -1 문자 없음.
System.out.println(str.indexOf("v"));  //결과값 8
System.out.println(str.lastIndexOf("v")); //결과값 8

System.out.println(str1.indexOf("r"));
System.out.println(str1.lastIndexOf("r"));
System.out.println(str1.indexOf("r", 4)); //r을 찾는 시작 위치 : 4

 

(4) 문자열 변환 및 연결

-Type_1 : valueOf() - 괄호 안의 값을 String으로 변환.

System.out.println(String.valueOf(1));
System.out.println(String.valueOf(-5.3));

 

-Typle_2 : concat() - 문자열 이어 붙이기

System.out.println("java".concat(" Program"));  //java Program

 

(5) 문자 배열 변환

-Type_1 : getByte(); - byte로 변환

System.out.println();
String str10 = "java"
byte[] bs = str10.getBytes();

//배열 출력
for(byte b:bs){  //bs라는 배열로부터 값을 하나씩 꺼내서 b에 할당.
    System.out.println(b);
}

-Type_2 : toCharArray(); - char로 변환

String str10 = "java"
char[] chs = str10.toCharArray();

//반목문
for(char ch:chs){ //chs 배열로부터 하나씩 꺼내서 할당. ch 끝날 때까지 반복.
    System.out.println(ch);
}

 

(6) 문자열 수정

-Type_1 : toLowerCase();, toUpperCase();

문자열을 소문자/대문자로 바꾼다.

String str1- = "java program 1.8";
System.out.println(str1.toLowerCase()); //결과 : java program 1.8
System.out.println(str1.toUpperCase()); //결과 : JAVA PROGRAM 1.8

 

-Type_2 : replace(); - 문자열의 문자를 바꾼다(대체한다)

String str1- = "java program 1.8";
System.out.println(str1.replace("1.8", "17"));  //java program 17

 

-Type_3 : substring(); - 문자열 잘라서 반환

String str1 = "java program 1.8";

//1
System.out.println(str1.substring(5));     // program 1.8
//2
System.out.println(str1.substring(5, 12)); // program

└1은 str1[5]부터 끝까지 리턴.

└2는 str1[5] ~ str1[12-1] 리턴.

 

-Type_4 : split(); - 지정한 문자를 기준으로 문자열 자르기

String str1- = "java program 1.8";

String[] strArray=str1.split(" "); //공백을 기준으로 나눈 뒤 문자열 배열 strArray에 대입
System.out.println(strArray[0]);  //결과 : java
System.out.println(strArray[1]);  //결과 : program
System.out.println(strArray[2]);  //결과 : 1.8

└공백을 기준으로 자른 뒤 문자열 배열 strArray에 대입

 

-Type_5 : trim(); - 문자열의 좌우공백 제거

String str10 = "java program 1.8";
String str9 = " java ";

str9 = str9.trim(); //java

└문자열의 처음과 끝에 있는 공백 제거. 문자열 사이에 있는 공백은 제거하지 않음.

 

(7) 문자열 내용 비교  .equals(); / .equalsIgnoreCase();  ★

String str10 = "java program 1.8";
String str3 = "java";
String str4 = new String("java")

System.out.println(str3 == str4); //메모리번지(stack) 비교  //false
System.out.println(str3.equals(str4)); //문자열 비교  // true
System.out.println(str3.equalsIgnoreCase(str4)); //문자열 대소문자 구분없이 비교.  //true

 

(8) 문자열 쪼개기  StringTokenizer

사용하기 위해서는 import 필요. StringTokenizer 위에서 [ctrl] + [shift] + [o]

String str = "씽2게더, 스파이더맨:노 웨이 홈,특송-경관의 피/하우스 오브 구찌";

StringTokenizer st = new StringTokenizer(str, ",=-/");
System.out.println(st.countTokens());

while(st.hasMoreTokens()){ //토큰을 쪼개서 꺼내 st 대입. st에 값이 있는 동안 반복
    System.out.println(st.nextToken());
}

//split 사용
String[] str1 = str.split(",|-|/");
for(Stirng s:str1){
    System.out.println(s)
}

└Split : 글자를 자를 때, 하나의 형태로 구분했다면 split 사용하면 편함. ex 공백, 콤마, 슬래스 중 하나로 구분

└StringTokenizer는 자바 유틸이라 임포트해야 함.

   (java.lang에 있는 Math, Integer, class 등은 별도의 임포트할 필요없음)

 

 

'수업 > └Java' 카테고리의 다른 글

[CH06_2]클래스 내부 구성 요소  (0) 2022.01.31
[CH06_1]클래스 기본 문법  (0) 2022.01.31
[CH05_1]참조 자료형 : 배열(Array)  (0) 2022.01.31
[CH04_02]제어문 : 반복문  (0) 2022.01.30
[CH04_1]조건문 실습 예제_책  (0) 2022.01.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
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
글 보관함