Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

기록 저장소

[Java #20] lang package_String Class 본문

kitri 노트/java

[Java #20] lang package_String Class

resault 2019. 3. 25. 23:32

[ String Class ]

1. String 객체 생성

1) 객체 생성방법 2가지

▷ literal 값 대입
String s1 = "java";
String s2 = "java";

▷ new 연산자 사용
String s3 = new String("java");
String s4 = new String("java");


2) String의 주소값, 문자열 비교

▷ 주소값 비교 : ==
if(s1 == s2 )
      System.out.println("s1 s2는 주소값이 같다");//o
if(s1 == s3 )
      System.out.println("s1 s3는 주소값이 같다");//x
if(s1 == s4 )
      System.out.println("s1 s4는 주소값이 같다");//x
if(s2 == s3 )
      System.out.println("s2 s3는 주소값이 같다");//x
if(s2 == s4 )
      System.out.println("s2 s4는 주소값이 같다");//x
if(s3 == s4 )
      System.out.println("s3 s4는 주소값이 같다");//x

▷ 문자열 비교 : equals()    (Object Class의 equals() override)
if(s1.equals(s2))
      System.out.println("s1 s2는 문자열의 값이 같다");//o
if(s1.equals(s3))
      System.out.println("s1 s3는 문자열의 값이 같다");//o
if(s1.equals(s4))
      System.out.println("s1 s4는 문자열의 값이 같다");//o
if(s2.equals(s3))
      System.out.println("s2 s3는 문자열의 값이 같다");//o
if(s2.equals(s4))
      System.out.println("s2 s4는 문자열의 값이 같다");//o
if(s3.equals(s4))
      System.out.println("s3 s4는 문자열의 값이 같다");//o
//대소문자 구별해서 비교됨!



2. String Class constructor


1) String()
- default 생성자
- 비어있는 문자열을 생성
//String str = null;// heap에 올라가지 않은 상태
//System.out.println("문자열 길이 : " +  str.length());//str이 null이므로, NullPoint Exception 발생
String str = new String(); //heap에 올라갔지만, 값이 ""
System.out.println("문자열 길이 : " + str.length());//0


2) String(byte[] bytes)
- 매개변수 : byte 배열
- 배열 전체를 String 객체로 생성 (ASKI CODE)
byte[] b = {97, 98, 99, 100};
String str2 = new String(b);
System.out.println("str2 == " + str2); //abcd


3) String(byte[] bytes, String charsetName)        (cf. String(byte[] bytes, Charset charset) 와 비교해볼 것)
- 매개변수 : byte 배열, "charsetName"
- 배열 전체를 String 객체로 생성
- 지정한 문자셋으로 디코딩    (*생성자도 method의 일종임!!)

(1) euc-kr (2byte)
- 완성형 한글
byte[] b = {-66, -56, -77, -25, -57, -49, -68, -68, -65,  -28, 46};//2byte로 쪼갬
//byte[] b = {46, 48, 65, 97}; // . 0 A a 암기할것!!
//String str2 = new String(b, "euc-kr");
String str2 = new String(b);//default는 "euc-kr
System.out.println("str2 == " + str2); //안녕하세요.         

(2) utf-8 (3byte)
byte[] b2 = {-20, -107, -120, -21, -123, -107, -19, -107,  -104, -20, -124, -72, -20, -102, -108, 46};//(utf-8) 3byte로 쪼갬
String str3 = new String(b2, "utf-8");//utf-8: 전세계 모든  글자를 3byte로 처리함(글자를 그려냄)
System.out.println("str3 == " + str3);//안녕하세요.


4) String(byte[] bytes, int offset, int length)
- 매개변수 : byte 배열, 시작 index, 개수
- 문자열 쪼개기
byte[] b3 = {97, 98, 99, 100, 101, 102, 103, 104};
String str4 = new String(b3, 2, 4);
System.out.println("str4 == " + str4);//cdef


5) String(byte[] bytes, int offset, int length, Charset charset)


6) String(byte[] bytes, int offset, int length, String charsetName)


7) String(char[] value)
- 매개변수 : char 배열
- char배열 전체를 String 객체로 생성
char[] c = {'a', 'b', 'c', 'd', 'e','f'};
String str5 = new String(c);
System.out.println("str5 == " + str5);//abcdef


8) String(char[] value, int offset, int count)        (cf. byte 배열을 받을때와 달리 length가 아닌 count임!!)
- 매개변수 : char 배열, 시작 index, 개수
- 문자열 쪼개기
char[] c = {'안', '녕', '하', '세', '요','.'};
String str6 = new String(c, 2, 4); //한글은 2바이트 씩이므로,  length면 일일히 계산해야 함. 근데 count니까 걍 글자수 ㄱㄱ
System.out.println("str6 == " + str6);//하세요.


9) String(String original)
- 매개변수 : literal 방식의 문자열
String x = "안녕하세요.";
System.out.println("x == " + x);



3. String Class method


1)  charAt(int index)
- index 위치의 char 반환
String str = "Hello Java !!!";
char c = str.charAt(4);
System.out.println("c == " + c); //o

▷ 예제1
str = "123";
System.out.println(str.charAt(0)); //1
//int x = str.charAt(0); //str.charAt(0)는 char 반환 >>  강제형변환 >> 49
int x = str.charAt(0) - 48; // 49-48 >> 1
System.out.println("x == " + x);

▷ 예제2
// 문자열이 숫자인지 아닌지 판별
String str = "1a2";
int len = str.length();

String result = "숫자입니다.";
for (int i = 0; i < len; i++) {
      int num = str.charAt(i) - 48;
      if(num < 0 || num > 9) {
            result = "숫자가 아닙니다.";
            break;
      }
}
System.out.println(str + "은 " + result);


2) concat(String str)
- 문자열 연결하여 String 반환    (+연산자와 동일)
String str1 = "hello ";
String str2 = "java";
System.out.println(str1 + str2);//원본은 바뀌지 않음
System.out.println(str1.concat(str2));//원본은 바뀌지 않음


3) endsWith(String suffix) | startsWith(String prefix) 
- suffix | prefix 비교하여 boolean 반환
- 대소문자 구분함
str = "Hell java !!!";
if(str.startsWith("h"))
    System.out.println(str + "은 h로 시작한다.");
if(str.startsWith("H"))
    System.out.println(str + "은 H로 시작한다.");
if(str.startsWith("He"))
    System.out.println(str + "은 He로 시작한다.");

if(str.endsWith("!!"))
    System.out.println(str + "은 !!로 끝난다.");    

4) equals(Object anObject)
- 문자열 비교하여 boolean 반환


5) toUpperCase() | toLowerCase()
- 문자열을 대문자|소문자로 반환
String s1 = "jAva";
String s2 = "JavA";
System.out.println("s1.toUpperCase() == " + s1.toUpperCase());
System.out.println("s2.toLowerCase() == " + s2.toLowerCase());\

if(s1.equals(s2))
      System.out.println(s1 + "과 " + s2 + "는 같은 문자열이다.");
else
      System.out.println(s1 + "과 " + s2 + "는 다른 문자열이다.");
      
if((s1.toUpperCase()).equals(s2.toUpperCase()))
      System.out.println(s1 + "과 " + s2 + "는 대소문자 구분없이 같은 문자열이다.");
else
      System.out.println(s1 + "과 " + s2 + "는 대소문자 구분없이 다른 문자열이다.");


6) equalsIgnoreCase(String anoherString)
- 대소문자 무시하고 문자열 비교하여 boolean 반환
if(s1.equalsIgnoreCase(s2))
      System.out.println(s1 + "과 " + s2 + "는 대소문자 구분없이 같은 문자열이다.");
else
      System.out.println(s1 + "과 " + s2 + "는 대소문자 구분없이 다른 문자열이다.");


7) getBytes()
- 문자열을 byte 배열로 반환
String str = "abcdef";
byte[] b = str.getBytes();
int len = b.length;
for (int i = 0; i < len; i++) {
      System.out.println("b["+i+"] == " + b[i]);
}

String str2 = "안녕하세요.";
byte[] b2 = str2.getBytes(); // default는 운영체제의 charset
int len2 = b2.length;
for (int i = 0; i < len2; i++) {
      System.out.println("b2["+i+"] == " + b2[i]);    //2byte로 쪼개짐
}


8)  getBytes(String charsetName)
- 지정한 문자셋으로 디코딩하여 byte 배열로 반환
String str2 = "안녕하세요.";
byte[] b2 = str2.getBytes("utf-8");
int len2 = b2.length; //배열의 length는 키워드
for (int i = 0; i < len2; i++) {
      System.out.println("b2["+i+"] == " + b2[i]); // 3byte로 쪼개짐
}


9) toCharArray()
- 문자열을 char 배열로 반환
String str2 = "안녕하세요.";
len2 = str2.length(); //String의 length는 method
char[] c = str2.toCharArray();
for (int i = 0; i < len2; i++) {
      System.out.println("c["+ i +"] == " + c[i]);
}


10) hashCode()


11) indexOf(int ch)
- char가 첫번째로 나오는 index를 int로 반환
String str = "hello java !!!";
int x = str.indexOf('a');
System.out.println(str + "에서 a는 " + (x+1) + "번째 있다.");


12) indexOf(int ch, int fromIndex)
- index 이후에 char가 나오는 index를 int로 반환
String str = "hello java !!!";
x = str.indexOf('a', 8);
System.out.println(str + "에서 8번째부터 a는 " + (x+1) +  "번째 있다.");


13) lastIndexOf(int ch)
- 문자열의 끝에서부터 시작하여 char가 첫 번째로 나오는 index를 int로 반환
x = str.lastIndexOf('a');
System.out.println(str + "에서 끝에서 부터 찾았을 때,  처음으로 나오는 a는 " + (x+1) + "번째 있다.");
//반환되는 index는 앞에서부터 값을 매긴거임


14) isEmpty()
- 문자열의 길이가 0이면 true 반환
String str2 = "";
System.out.println(str2 + "의 길이 : " + str2.length());
if(str2.isEmpty())
      System.out.println("빈문자열이다.");
else
      System.out.println("str2 == " + str2);


15) trim()
- 문자열 앞 뒤 공백제거
- 문자열 사이의 공백은 제거되지 않음
String str3 = "  hello     ";
System.out.println(str3 + "의 길이 : " + str3.length());
System.out.println(str3 + "의 공백을 제거한 후 길이 : " +  str3.trim().length());

str3 = "  hello     .";
System.out.println("str3.trim() == " + str3.trim());
System.out.println(str3 + "의 공백을 제거한 후 길이 : " +  str3.trim().length());


16) replace(char oldchar, char newChar)
- 문자 대체
String str4 = "jaba";
System.out.println(str4 + " >>> " +str4.replace('b', 'v'));


17) replace(CharSequence target, CharSequence replacement)
- 문자열 대체
- CharSequence Class는 interface이나,  String 클래스로 구현되어 있음
String str4 = "jaba";
System.out.println(str4 + " >>> " +str4.replace("jaba", "java"));


18) replaceAll(String regex, String replacement)
String str4 = "jaba";
System.out.println(str4 + " >>> " +str4.replaceAll("jaba", "java"));


19) split(String regex)
- regex 기준으로 문자열 나누기
String str5 = "hello java !!!";
String[] s = str5.split(" ");
int len = s.length;
for (int i = 0; i < len; i++) {
      System.out.println("s[" + i + "] == " + s[i]);
}


20) substring(int beginIndex)
- beginIndex 부터 끝까지 반환
System.out.println(str5.substring(6));


21) substring(int beginIndex, int endIndex)
- beginIndex 부터 endIndex 전까지 반환
System.out.println(str5.substring(6, 9));


22) valueOf()
- 매개변수를 String으로 반환
- static이므로 객체 생성없이 클래스 이름으로 사용
//문자열로 변환 (3가지 방법)
int num = 100;
String sn1 = num + "";
System.out.println(sn1 + sn1);
String sn2 = String.valueOf(num);
System.out.println(sn2 + sn2);
String sn3 = Integer.toString(num);
System.out.println(sn3 + 100);

cf.
//문자열을 숫자로 변환 (1가지 방법밖에 없음)
String ns = "100";
num = Integer.parseInt(ns);
System.out.println(num + 100);





'kitri 노트 > java' 카테고리의 다른 글

[Java #22] util package  (0) 2019.03.27
[Java #21] lang package_StringBuffer Class  (0) 2019.03.27
[Java #19] lang package_Wrapper Class-수정  (0) 2019.03.25
[Java #18] array  (0) 2019.03.25
[Java #17] package  (0) 2019.03.25