본문 바로가기
Java/기초편 - 2

String클래스

by 피자보다 치킨 2022. 3. 19.

String클래스

  • 문자열을 다루기 위한 클래스
  • String클래스 = 데이터(char[] → 문자배열) + 메서드(문자열 관련)
  • 내용을 변경할 수 없는 불변(immutable) 클래스
    String a = "a";
    String b = "b";
    a = a + b; //a의 내용이 바뀌는게 아니라 완전히 새로운 문자열a가 만들어지는 것이다.(기존 주소는 끊어지고 새로운 객체 즉, 새로운 주소가 생긴다.)
  • 덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어짐(계속해서 새로운 객체가 만들어지기 때문에)
    문자열의 결합이나 변경이 잦다면, 내용을 변경가능한 StringBuffer를 사용

문자열 비교

  • String str = "abc"와 String str = new String("abc")의 비교
String str1 = "abc"; //문자열 리터럴 "abc"의 주소가 str1에 저장됨
String str2 = "abc"; //문자열 리터럴 "abc"의 주소가 str2에 저장됨
//→하나의 문자열("abc")을 여러 참조변수가 공유

str1 == str ? true //주소비교
str1.equals(str2) ? true //내용비교

String str3 = new String("abc"); //새로운 String인스턴스(객체)를 생성
String str4 = new String("abc"); //새로운 String인스턴스(객체)를 생성
// →new: 항상 새로운 문자열 생성

str1 == str ? false  (주소지가 다르다. 즉 다른 객체)
str1.equals(str2) ? true //equals는 내용비교

문자열 리터럴

  • 문자열 리터럴은 프로그램 실행시 (new String안해도)자동으로 생성된다.(constant pool이라는 상수 저장소에 저장)
    String s1 = "AAA"; //new String("AAA")로 만들어짐
    String s2 = "AAA";
    String s3 = "AAA";
  • 같은 내용의 문자열 리터럴은 하나만 만들어진다.
    위 s1, s2, s3는 자동으로 만들어진 문자열 리터럴(상수)"AAA"를 가르키게 됨. (여러 참조변수가 공유하게 된다)

빈 문자열(" ",empty string)

  • 내용이 없는 문자열. 크기가 0인 char형 배열을 저장하는 문자열
          String str = "";
  • 크기가 0인 배열을 생성하는 것은 어느 타입이나 가능
          char[] chArr = new char[0];//길이가 0인 char배열
          int[] iArr = {}; //길이가 0인 int배열
  • 문자(char)와 문자열(String)의 초기화
          String s = "";//빈 문자열로 초기화
          char c = ' ';// 공백으로 초기화


String클래스의 생성자와 메서드

System.out.println("String 클래스의 메서드");  
String str1="apple";  
String str2="Apple";  
String str3="Have a Nice Day";  
String str4="   Happy Day    ";  
System.out.println("str3의 길이:"+str3.length()); //15  
System.out.println("str4의 길이:"+str4.length()); //16  
System.out.println("앞뒤공백 제거 후 str4의 길이:"+str4.trim().length());//trim:공백제거  
System.out.println("*"+str4+"*");  
System.out.println("*"+str4.trim()+"*");  
System.out.println("str3에서 0번 문자"+str3.charAt(0)); //H  
System.out.println("str3에서 7번 문자"+str3.charAt(7));//스트링을 캐릭터로 인식하게 /NSystem.out.println("str3에서 H의 인덱스"+str3.indexOf('H'));//스트링을 인트로 인식하게  
System.out.println("str3에서 N의 인덱스"+str3.indexOf('N'));  
System.out.println("str3에서 Have추출"+str3.substring(0,4));//0,1,2,3추출  
System.out.println("str3에서 Nice추출"+str3.substring(7,11));//7,8,9,10추출  
System.out.println("str3에서 Nice부터 끝까지 추출"+str3.substring(7));  

//equals는 같으면 true,틀리면 falseSystem.out.println("문자열비교:"+str1.equals(str2));//대소문자까지 같아야 trueSystem.out.println("문자열비교:"+str1.equalsIgnoreCase(str2));//대소문자상관없이 같으면 true  

//a.compareTo(b)  
//a와 b가 같을 경우 0//a가 작을 경우 -값(알파벳 차이만큼 마이너스값)  
//a가 클 경우 +값(알파벳 차이만큼 플러스값)  
System.out.println(str1.compareTo(str2));//32(a(97)pple A(65)pple비교_아스키코드기준 첫글자 계산됨)  
System.out.println(str1.compareTo(str1));//0(같을경우)  
System.out.println("computer".compareTo("command"));//3(p와 m이 비교)  
System.out.println("hello".compareTo("hello"));//0  
System.out.println("apple".compareTo("banana"));//-1  
System.out.println("kiwi".compareTo("orange"));//-4 k와 o비교_아스키코드기준 계산됨111  

System.out.println("str3 가 Have로 시작하면 true:"+str3.startsWith("Have"));//특정 문자열로 시작하는지  
System.out.println("str3 가 Happy로 시작하면 true:"+str3.startsWith("Happy"));  
System.out.println(str3.endsWith("Day"));//true-Day로 끝나면 trueSystem.out.println(str3.endsWith("day"));//false  

//문자열 분리하는 매서드 splitString str5="red,blue,green,black,pink";  
System.out.println("str5를 컴마로 분리하여 출력하기");  
String []arr=str5.split(",");  
System.out.println("분리된 색상 갯수:"+arr.length);  
//출력  
for(String color:arr)//for문:배열이나 컬렉션에서 사용하는 for문  
  System.out.println(color);  


System.out.println("str3를 소문자로 출력:"+str3.toLowerCase());  
System.out.println("str3를 대문자로 출력:"+str3.toUpperCase());  

String a=String.valueOf(100);//int->String //빈문자열을 더하는 것보다 성능이 빠르다.  
String b=String.valueOf(12.3);//double->String  
String a2=100+"";//+연산 시 String이 있으면 결과는 StringString b2=12.3+"";  

System.out.println("문자열 일부를 변경");  
System.out.println(str3.replace('a', '*'));//출력: H*ve * Nice D*y(a가 *로 바뀜)  
System.out.println(str3.replace("Nice", "Good"));//출력: Have a Good Day(Nice가 Good으로 바뀜)

StringJoiner

  • join()은 문자열 사이에 구분자를 넣어서 결합한다.

          String foods = "apple, orange, spake";  
          String[] arr = foods.split(",");  
          for (String food : arr) {  
              System.out.println("food = " + food);  
          }  
    
          String str = String.join("_", arr);  
          System.out.println("str = " + str); //결과: str = apple_ orange_ spake

문자열과 기본형 간의 변환

  • 숫자를 문자열로 바꾸는 방법

      int i = 100;  
      String str1 = i + "";  //1. 빈문자열 더하기(편리함)
      String str2 = String.valueOf(i); //2. String 메서드활용(속도빠름)
  • 문자열을 숫자로 바꾸는 방법

      int j = Integer.parseInt("100");  
      int s = Integer.valueOf("100");  
      Integer s2 = Integer.valueOf("100");

댓글