본문 바로가기
Java

Java_String

by 히예네 2023. 1. 26.
728x90
반응형

String

GUI환경에서는 사용자가 입력하는 글씨는 무조건 문자열로 들어온다.

→ java에서는 모든 입력 값을 다 문자열로 본다.

JAVA 문자열을 객체로 사용하도록 강제화 됨. (글자수만큼 배열로 이뤄짐)
‘H’ ‘e’ ‘l’ ‘l’ ‘o’

java는 유니코드라서 한문자는 각각 2바이트이다. (총10바이트)

String이라는 클래스안에 문자열 기능을 많이 넣어둠. new를 써서 객체를 만들자.

(C언어에서는 끝문자가 필요한데, 자바는 객체가 알아서 인식함)

String 객체는 한 번 결정되면 그 값을 절대로 바꿀 수 없다. (글자수, 모양 등등)

(immutable 이뮤터블 성질)

특별한 String 성질 (축약형)

String s = new String(”Nice”) 에서

s = “Nice”로 써도 된다. (간결하게 !객체를 자동으로 만들어줌. 스트링만 줄임말을 쓴다)

Heap메모리

스트링영역 줄임말영역 : 문자열 상수 영역
String s = new String(”Nice”) s = “Nice”

기존에 똑같은 글자가 있든 없든 new를 쓰면 자동으로 만든다.

그러나 문자열이 같으면 축약형 일 때는 자동으로 만들지 않는다.

String s1 = “Hello”

String s2 = “Hello”

>>>>s2 입장 : 기존에 만든 Hello의 주소를 가르킨다. 그러므로 s1==s2이다.

 

언제나 클래스 이름은 파일명과 같아야한다.

💡

tool tip 해석하기

① ( ) 안에 아무것도 없으면 파라미터가 필요없다라는 뜻이다.

② : 은 int형 숫자를 리턴 받을 것이야 라는뜻 >> 그니까 변수를 만들라는뜻

③ -는 어느 class에 저장된 것인가?

 

Stiring(문자열)의 13가지 기능

Java에서는 문자열(String)을 객체로 관리함. 즉, 자바에서 문자열은 객체이다.

Java의 String객체는 글씨변경이 불가능함. [이뮤터블 성질]

(1) 문자열 데이터 길이를 리턴해주는 기능(method)

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		// Java에서는 문자열(String)을 객체로 관리함. 
		//즉, 자바에서 문자열은 객체이다.
		//Java의 String객체는 글씨변경이 불가능함. [이뮤터블 성질]
		
		String str=new String("Hello");
		//단 , String은 워낙 많이 사용되기에 축약표현문법을 제공함
		str="Hello"; //자동 new string이 된다. 
		
		//객체는 기능(method)들을 갖고 있다.
		//String class에 설계된 유용한 method들을 알아보는 시간
		
		//1. 문자열 데이터의 길이 (글자수)를 리턴해주는 기능(method), 출력기능X
		//생각을해야함. 리턴값을 받으려면? 그 줄 앞에 자료형을 써줘서 받는다. 
		int len=str.length(); //
		System.out.println("글자수 : "+len);

(2)문자열의 값의 비교기능

		//2. 문자열의 값의 비교기능
         System.out.println(str=="hello"); 
         //true와 false가 되는경우는? 축약형일때는 같고 아닐때는 false이다. 
         System.out.println(str.equals("Hello"));
         //System.out.println(str.equals(new Stirng("Hello"))); 원래는 뉴스트링해야함
         String s1="Nice"; //보기에는 문자열, 그러나 컴퓨터는 객체로 바라본다.
         System.out.println(str.equals("s1")); //s1과 str은 다른 문자열이다
         System.out.println("Hello".equals(str)); //문자열은 객체로본다! 
         
         //2-1대소문자 비교, 대소문자무시하는 Ignore
         System.out.println(str.equals("Hello")); //false 
         System.out.println(str.equalsIgnoreCase("hello")); //true 
         //문자열은 ==하지마라 
         System.out.println( );
         System.out.println( );

(3) 문자열에서 특정한 char 얻어오기

  
         //3. 문자열에서 특정한 char 얻어오기
         char ch=str.charAt(0);
         System.out.println(ch);
         System.out.println(str.charAt(1));
         System.out.println(str.charAt(2));
         System.out.println(str.charAt(3));
         System.out.println(str.charAt(4));
         //System.out.println(str.charAt(5));
        // C에서는 쓰레기값이 나오지만 java에서는 에러! 
         System.out.println( );
         System.out.println( );
         
         for(int i=0;i<str.length();i++) //지금은 내가 글자수를 알고있어서 5를쓴다.
        	                              //length를 쓰면 내가 글자수를 몰라도 알아서 계산
         {
        	 System.out.println(str.charAt(i));
         }
         
         //Scanner객체를 이용하여 char 한문자 입력받기
         Scanner scan=new Scanner(System.in);
//         String s2=scan.next(); //문자열을 입력받기
//         char c=s2.charAt(0); //한글자 뽑아내는것 
//         System.out.println("c :"+c) ;

(4) 문자열 안에 특정 문자열이 포함되어있는지

       
        //4. 문자열안에 특정 문자열이 포함되어 있는지 여부(t or f)
         String s =new String("Hello world! Hello android! nice world!");
         boolean b=s.contains("world"); //띄어쓰기도 포함되므로 조심
         System.out.println(b);
         System.out.println(s.contains("word"));

(5) 문자열 안에 특정 문자가 몇 번째 위치에 있는지

     
         //5. 문자열안에 특정문자가 몇번째 위치에 있는지 알려줌
         int index =s.indexOf('e'); //h가 어딘지 인덱스 번호로 알려줌
         System.out.println(index); //제일 첫번째 e의 인덱스를 알려줌
         System.out.println(s.lastIndexOf('e')); //뒤에서부터 몇번째 인덱스인지
         
         //5-1. 특정 문자열의 시작위치도 검색가능 
         index=s.indexOf("android");
         System.out.println(index);

         //5-2.특정 위치부터 검색 요청도 가능
         index=s.indexOf("Hello",5); //5번 인덱스위치부터 검색 시작 
         System.out.println(index);
         

(6)문자열 결합 가능

    //6.문자열 결합기능 
    String s3=s.concat(" nice android!");  // 이뮤터블 성질에 콘캣한것임.
// s가 바뀌는게 아니라 s에 새로운글자롤붙여서 새로운곳에 메모리가 생기고 
	  //그것이 리턴된것이다.
  System.out.println("원본 s:"+s); //원본s는 그대로이다. 새로운 문자열 s3를 리턴하는것이다.  
  System.out.println("원본 s: "+ s3); //리턴값을 갖고온다. 
        
//  .concat()은 잘 사용안함 why? 결합연산자의 제공때문에 ..+가 콘캣연산자 기능을 대신 호출해줌 
         String s4=s +" nice ios!" ; //+는 산술연산자 X, 콘캣연산자 
         System.out.println("원본 s:"+s); 
         System.out.println(" s: "+ s4); 

(7)어떤 문자열이 특정한 문자열로 시작되는지 여부

         //7. 어떤 문자열이 특정한 문자열로 시작되는지 여부
         System.out.println(s.startsWith("Hello"));
         System.out.println(s.startsWith("world"));
         //7-1 특정문자열로 종료되는가?
         
         System.out.println(s.endsWith("Hello"));
         System.out.println(s.endsWith("world!"));

(8)대소문자 변환

         //8. 대소문자 변환
         System.out.println(s.toUpperCase());
         System.out.println(s.toLowerCase());
         System.out.println(s); //원본 변경 X
         
         s=s.toUpperCase();//원본을 변경하고싶다면 원본참조변수에 새로운 문자열 객체를 대입
         System.out.println(s); 

(9)앞뒤 공백제거

         
         //9.문자열의 앞뒤 공백 제거, 진짜 많이씀
         s="Hello                "; 
         System.out.println("["+s+"]");
         
         s=s.trim(); 
         System.out.println("["+s+"]");

(10)특정 문자 바꿔치기

         //10.특정문자 바꿔치기 기능
         s="Hello world! Hello android! Nice world!";
         System.out.println(s.replace('H','K' )); //H가 들어간 한문자는 다 바꾼다. 그러나 원본은 불변!
         
         //10-1. 특정문자열도 바꿔치기 가능
         System.out.println(s.replace("android","ios" )); //H가 들어간 한문자는 다 바꾼다. 그러나 원본은 불변!
         //비속어 거르기 
         
         //중간 공백문자도 없앨수있음.
         System.out.println(s.replace(" ", "")); // 공백문자 : " " 랭스1 / 빈 문자열 : "" 랭스0
         System.out.println(10+""); 

(11)문자열 잘라내오기

   
         //11.문자열 잘라내오기
         String s5=s.substring(6);
         //6번방뒤로 있는문자열을 잘라내서 새로운 문자열로 리턴해줌. 원본은 자르지 않는다.
         System.out.println(s5);
String s6=s.substring(6, 12); //6부터 11번방까지 엔드 인덱스는 포함 안됨. 
         System.out.println(s6);

(12)문자열 값의 대소 비교

        //12. 문자열값의 대소비교 [문자열 정렬할때 사용됨]
         int x=10;
         int y=15;
         
         char ch1='a';//97
         char ch2='b';//98
         System.out.println(ch1<ch2); //숫자도, 문자도 대소비교가능
         
         String s7="aaa";
         String s8="aab";
         //System.out.println(s7<s8); 주소는 대소비교가 불가능
         System.out.println(s7.compareTo(s8)); //잘 안쓴다.
         

(13)문자열을 특정문자를 기준으로 분리해서 여러개의 문자열로 리턴해줌.

         //13. 문자열을 특정문자를 기준으로 분리해서 여러개의 문자열로 리턴해줌. 
         //문자열하나가 있습니당. 문자열을 기준을 세워여러개를 자른다. 여러개 리턴? ㅇㅁㅇ
         //문자열 배열로 리턴한다! 엄청많이 쓴다
         //문자열도 배열이다 
         
         s="android,ios,web";
         String[] arr=s.split(","); 
         //,를 기준으로 잘라줘 구분자는 여러문자써도 되지만 보통 , ; 이렇게 씀
         //하나의 객체"android,ios,web" 를 
         //3개의 객체 "android" "ios" "web" 로 분리시킴
         System.out.println(arr[0]);
         System.out.println(arr[1]);
         System.out.println(arr[2]);
         
         
         System.out.println( );
         System.out.println( );
         
         for(int i=0;i<arr.length;i++) //문자열이아니라 멤버변수의 갯수를 알려줌
         {
        	 System.out.println(arr[i]);
         }

 

 

CSV (comma separated value) 확장 파일:

데이터를 구별해서 쓰려고 (,)로 구분한다 sam,20,0202,....

 

객체를 안 만들고도 쓸 수 있는 기능

//String class의 static method들
//static method란? 객체생성없이 바로 사용할 수 있는 기능메소드 [클래스명.메소드명(호출문)]
         //원래 객체는 [참조변수.~]
         
   //1) .format() : 특정 포멧(모양/형식)의 문자열을 생성하고 싶을때 사용하는 기능메소드
         int hour=13; //시
         int min=15; //분
         int sec=24; //초 
         
         System.out.println(hour + ":" + min + ":"+ sec);
         
         min=3;
         System.out.println(hour + ":" + min + ":"+ sec);
         System.out.printf("%02d:%02d:%02d\\n",hour,min,sec); //f는 포멧이다
         //이 친구는 출력형태를 무조건 CLI환경의 콘솔에만 출력된다. 수업때만 유용 
         //실무에서는 GUI환경으로 데이터를 표시하며 이 표시는 반드시 문자열 데이터만 출력할수있음.
         String ss=String.format("%02d:%02d:%02d", hour,min,sec);  
        //데이터를 생성하라고! new를 대신해서 static method을 쓴다
         //변수는 카멜표기법, class는 파스칼
         //이때의 .은 new때랑 다르다
         System.out.println("현재시간 - "+ss);
         //출력이 아니라 생성이다. 
         
         //2) .valueOf() :  기본형 자료형 (primitive)을 String 객체로 변환하능 기능 메소드

         int num=100;// 정수를 
         String s10=String.valueOf(num); //100이라는 숫자를 "100"으로 바꿈
         System.out.println(s10.length());
         
         String s11=String.valueOf(3.14);
         System.out.println(s11.length());
         
         String s12=String.valueOf(true);
         System.out.println(s12.length());
         //GUI환경에서 기본형을 문자열로 변환하는 코드는 아주빈번함.
         //하지만 자주 사용되지않음.why ? + 결합연산자 이용하면 더 간결해서 
         
         String s13=1000+""; //빈문자열을 더함. 자동으로 기본형을 다 스트링으로 만든다. " "으로 쓰면 안됨
         String s14=5.24+""; //이게 더 편함
         String s15=""+false;
         
         System.out.println(s15.length());

         //반대로 문자열을 기본형으로 변환하고 싶다면??
         //"5"와 '5'와 5는 다르다
         //이 기능은 String class에 없다. 
         //이 기능을 가진 클래스들이 있다. 이 클래스들(8개)의 static method를 사용.
         //이런 클래스들을 Wrapper 클래스(8개)라고 부름 
//: Boolean,Byte,Character,Short,Integer,Long,Float,Double
         //대문자로 시작하면 참조형이다 
         int a=10;
         Integer aa=new Integer(10);//참조형 이렇게 잘 안써 ??
       
         //int n="100"; 객체는 기본형에 넣을수없다.
         int n=Integer.parseInt("100"); //문자열을 기본형(int)로 바꿈.
         System.out.println(n+3);
         
         double n2=Double.parseDouble("3.14");
         System.out.println(n2); 
728x90
반응형

'Java' 카테고리의 다른 글

Java_객체 지향 프로그래밍 OOP  (0) 2023.01.27
Java_배열  (0) 2023.01.26
Java_키보드 입력 Scanner  (0) 2023.01.26
Java_화면 출력 객체 System.out  (0) 2023.01.24
Java_자료형과 변수  (2) 2023.01.24