컴퓨터 관련/JAVA 강의

java #16 문자열, String클래스 메소드

승명 2016. 12. 18. 19:46

java #16 문자열, String클래스 메소드

 
 
 


 
* 문자열을 저장하는 클래스들

java.langString짧은 문자열"..."- 참조형 데이터형
- 기본형형식(데이터형 변수명 = 값 ex> String S="ABC"), 참조형형식(데이터형 변수명 = new 생성자() ex>String s=new String ("ABC"))  두가지로 사용할 수 있다.
  단, 참조형형식은 힙의 주소를(힙은 문자열 저장소를 참조), 기본형은 문자열 저장소의 주소를 직접 저장하므로 비교 연산시 주의 해야함.
        ex) if(s=="ABC")o     if(s1=="ABC")x
  단, equals는 참조형 기본형 구분 없이 사용 가능.

- 문자열은 문자열 저장소에 저장되고 그 주소를 참조한다.(같은 문자열은 하나만 만들고 관리한다.)
java.langStringBuffer
문자열
"..." + "..."

2015/01/17 - [프로그래밍/Java] - java #20 꼭 알아야 할 클래스와 메소드-1- (문자열 관련)


위 링크 참조
java.langStringBuilder
문자열
"..." + "..."
java.utilStringTokenizer문자열 자를때


 

* String 클래스의 메소드

1
Sting s="AbcDE" 
cs

길이s.length();
대문자s.toUpperCase();
소문자s.toLowerCase();
특정문자의 인덱스s.indexOf("c") => 없으면 -1 출력됨
뒤에서부터 찾으면서 인덱스s.lastIndexOf("c") => 3
특정위치의 문자 하나 자르기s.charAt(1) => b
하위문자열 얻기s.substring(1(시작인덱스),3( 끝인덱스)) => bc (D에 Null문자가 덮어씌워져서 출력되지 않는다.)
문자열 붙이기s.concat("연습"); => "AbcDE연습"
같은지 비교(완벽하게 일치)equals("비교할 문자열");
앞부분이 같은지 비교s.startsWith("비교할 문자열");
끝부분이 같은지 비교s.endsWith("비교할 문자열");
문자열 내의 문자 치환s.replaceAll("찾을 문자열", "변경할 문자열");
특정문자로 구분하여 배열로 얻을때s = "김덕수김범수김승현"
s.split("김");
[덕수,병수,승현] (김으로 구분하여 배열에 입력됨)
   0      1      2
기본형 데이터형을 문자열 저장int i=10;
String s= i (x)
String s=String.valueOf(i);

 

 

 

- 인덱스는 0부터 시작됨
- 문자열 끝에는 Null문자가 들어가서 문장의 끝임을 알려준다.


* String 클래스 메소드 사용 예제

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package day0224;
 
/**
* 짧은 문자열(문자열에 +"가 없는 것)을 사용할 때 문자열은 문자열 저장소에 저장되고, 
* 그 주소를 참조한다. 문자열 저장소는 동일문자열을 저장하지 않는다.
*/
 
public class UseString {
 
 
     public static void main(String[] args) {
          // 기본형 형식 사용 : 데이터형 변수명 = 값;
          String s = "AbcDE";
          // 참조형 형식 사용 : 데이터형 변수명 = new 데이터형("값");
 
          String s1 = new String("AbcDE");
          System.out.println("안녕");
          // 비교 == 주소비교
          System.out.println("==으로 비교했을때");
          System.out.println("기본형" + (s == "AbcDE" ? " 같다" : " 다르다"));
          System.out.println("참조형" + (s1 == "AbcDE" ? " 같다" : " 다르다"));
          System.out.println("");
          // equals로 비교
          System.out.println("equals 메소드로 비교했을때");
          System.out.println("기본형" + (s.equals("AbcDE") ? " 같다" : " 다르다"));
          System.out.println("참조형" + (s1.equals("AbcDE") ? " 같다" : " 다르다"));
          System.out.println("");
          // /////02-24-2014 코드추가////
          // String class의 method 사용
          String mail = new String("gtwangi@gmail.com");
          System.out.println(s + " 길이 " + s.length());
          System.out.println(mail + " 길이 " + s.length());
          System.out.println(s + " 모두 대문자 "+ s.toUpperCase());
          System.out.println(s + " 모두 소문자 "+ s.toLowerCase());
          //AbcDE
          //01234
          System.out.println(s+" 에서 'c'의 인덱스 "+s.indexOf("c"));
          //문자가 없다면 인덱스는 -1이 나온다.
          System.out.println(s+" 에서 'z'의 인덱스 "+s.indexOf("z"));
          //같은 문자가 있다면 왼쪽->오른쪽으로 찾아나가면서 
          //가장 처음 등장하는 문자의 인덱스를 알려준다.
          s="ABcDEcDEcDE";
          //  012345678910
          System.out.println(s+" 에서 'c'의 인덱스 "+s.indexOf("c"));
          //오른쪽에서 왼쪽으로 진행하면서(뒤에서부터) 가장 처음 등장하는 문자의 인덱스를 알때
          System.out.println(s+" 에서 뒤에서부터 'c'의 인덱스 "+s.lastIndexOf("c"));
          
          String temp ="testsist.co.kr";
          
          if(temp.indexOf("@")==-1 || temp.indexOf(".")==-1){
               System.out.println(temp+" 에는 @나 .이 있어야 합니다.");
          }else{
               System.out.println(temp+"는 정상메일");
          }//end else
          
          //gtwangi@gmail.com
          //01234567
          System.out.println(mail+" 에서 7번째 인덱스의 문자 "+mail.charAt(7));
 
          //문자열의 하위 문자열 얻기 substring(시작인덱스, 끝인덱스+1);
 
          //상수를 넣으면 동일형태의 메일만 자를 수 있음.(정적)
          System.out.println(mail+" 에서 메일주소 " + mail.substring(07));
          System.out.println(mail+" 에서 도메인 주소 " + mail.substring(8));
          //동적
          System.out.println(mail+" 에서 메일주소 " + mail.substring(0, mail.indexOf("@")));
          System.out.println(mail+" 에서 도메인 주 
                              소 " + mail.substring(mail.indexOf("@")+1,mail.length()));
          
          temp = s.concat("붙일 문자열");
          System.out.println(temp);
          
          temp = "김덕수";
          System.out.println(temp+"는 '김' 인가요?" + (temp.startsWith("김")?"네" : "아니오"));
          temp = "이슬기";
          System.out.println(temp+"는 '수' 인가요?" + (temp.startsWith("수")?"네" : "아니오"));
     
          //문자열의 앞뒤 공백 제거
          temp =" AAA  A ";
          System.out.println("["+temp+"]의 의 앞뒤 공백 제거("+temp.trim()+"]");          
          
          temp ="나 지금 피씨방이야!";
          System.out.println("["+temp+"]의 의 앞뒤 공백 제거("+temp.trim()+"]");
          System.out.println(temp.replaceAll("씨방","**"));
          
          temp ="나 지금 피씨방이야!넌 어디니 씨 방새야";
          System.out.println("["+temp+"]의 의 앞뒤 공백 제거("+temp.trim()+"]");
          System.out.println(temp.replaceAll("씨","*").replaceAll("방","*").replaceAll("새","*")); 
                                                                                 //메소드 체인
          int i = 24;
          //기본형 데이터형을 참조형 데이터형에 넣을 때          
          temp = String.valueOf(i);
          System.out.println(temp);
          temp="김덕수,윤충수,이슬기,김병우,정현우,조승진";
          String[] name = temp.split(",");//구분하여 배열 생성
          System.out.println();    
          for(int j=0;j<name.length;j++){
          System.out.println(name[j]);
     }//end for
     }// main
}// class