본문 바로가기
  • developer
  • challenge
이론수업

자바-String 이론수업

by 빵승 2024. 1. 8.

import java.util.Scanner;

 

public class Main {

 

public static void main(String[] args) {

 

//java 에서는 문자열은 객체로 관리함

// 객체:Data + 기능 (Function: 함수-->메소드)

// 객체는 기능이 있다는 건데 그것은 System.out. 이점을 찍으면 쓸수 있는 기능들을 보여주는 것처럼 문자열도 기능이 있는 객체로 인식

// 객체는 이름을 가질수 없다. 보통은 int a= 하면서 변수의 이름을 설정하는데 문자열은 그게 안된다.

//int는 4 바이트 크기를 가졌다 문자열은 글자 한개당 2바이트씩 Hello 는 5글자라서 10바이트

// String s; 하면 이크기는 Hello이라는 문자열의 주소를 참조했다라고 생각 하면 된다 (참조 변수)

//String s;의 크기는 8바이트

 

int a,b;

a= 10;

b= 10;

 

System.out.println(a==b);

System.out.println(a);

System.out.println(b);

System.out.println();

 

String s1, s2;

s1= new String("Hello");

s2= new String("Hello"); //문자열의 비교는 ==을 쓰지 않는다 글자는 같지만 글자를 가지고 있는 주소가 다르기때문에 값을 비교한게 아니다.

System.out.println( s1==s2); //주소끼리 비교

 

System.out.println(s1); //자바에서 참조변수를 출력하면 원래는 주소가 나와야하지만 그 참조변수가 참조하는 객체의 기능 중.toString()이라는 기능이 자동 발동!!

System.out.println(s2.toString());

System.out.println();

 

//결론 자바에서 문자열은 객체임

// 객체는 new 키워드로 생성함 그 객체를 제어하는 참조 변수가 필요함

String s= new String("Hello");

System.out.println(s.toString()); //객체의 정보 출력기능.toString()

System.out.println(s); //참조변수명만 출력하면 자동. toString()

 

//문자열을 매우 자주 사용하는 데이터의 유형임. 매번 new String()쓰기 귀찮음

String ss="Nice"; //자동 new String("Nice"); 가됨

System.out.println(ss.toString()); //객체의 기능사용

System.out.println(ss.toUpperCase()); //객체의 기능사용

 

 

 

System.out.println(ss);

System.out.println("==============");

 

 

//문자열 String 객체의 유용한 기능들(gunction:함수-->metgod)

 

String str= new String("Hello");

 

//1.글자수를 리턴해주는 기능

int len = str.length();

System.out.println("글자수 : "+len);

 

//2.문자열의 값 비교(많이 쓰는것)

System.out.println(str=="Hello"); //주소비교 : false

System.out.println(str.equals("Hello")); //값 비교 : true

System.out.println(str.equals( new String("Hello")));

String s3= new String("Hello");

System.out.println(str.equals(s3));

System.out.println("Hello".equals(str));

 

//2-1 대소문자 비교

System.out.println(str.equals("Hello"));

System.out.println(str.equalsIgnoreCase("hello")); //대소문자 달라도 같은 글씨면 같은걸로 인식

 

//3. 문자열에서 한문자(character) 뽑아오기

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)); error 글자수는 4개라서 그래도 명령어에는 오류사항이 아니임

 

for(int i=0; i<str.length(); i++) {

System.out.println(str.charAt(i));

 

}

 

//한문자를 키보드로 받기

Scanner scan = new Scanner(System.in);

 

// String sss= scan.next();//문자열 입력

//char c= sss.charAt(0);

// System.out.println("입력받은 한문자 : "+c);

 

//4.문자열 안에서 특정 글자가 몇번쨰에 존재하는지...인덱스 번호를 리턴해줌 특정 글자를 분별할때

int index=str.indexOf('H');

System.out.println(index);

System.out.println(str.indexOf('l')); //앞에서부터 찾는거

System.out.println(str.lastIndexOf('l')); //뒤에서부터 찾는거

System.out.println(str.indexOf('G')); //못찾으면 -1

 

System.out.println(str.indexOf("el")); //한문자만 되는게 아니라 문자열도 가능

System.out.println(str.indexOf("eo"));

 

//5. 문자열안에 특정 문자열이 포함되없는지 여부를 리턴[true/false]

 

str= new String("Hello world! Hello acdroid! nice world");

boolean bb =str.contains("world");

System.out.println(bb);

System.out.println(str.contains("Android"));

 

//6.문자열을 결합해서 새로운 문자열을 만들어 리턴해줌

 

String str2=str.concat("nice android");

 

System.out.println("원본 str : "+str); //원본 불변

System.out.println("새로운 str : "+str2);

 

//문자열을 결합하는 코드는 매우 빈번히 사용됨. 하지만 concat()기능메소드는 잘 안씀.

//자바의 문자열 결합 연산자 +

 

String str3=str+"good android!";

System.out.println("str3 : " +str3);

System.out.println("str : " +str); //원본 불변

 

//7.문자열이 특정 문자로 시작되는가? 여부를 리턴 [true/false]

System.out.println(str.startsWith("Hello"));

System.out.println(str.startsWith("world"));

 

//7-1 문자열이 특정 문자로 끝나는가?

System.out.println(str.endsWith("world"));

System.out.println(str.endsWith("world!"));

 

//8.문자열을 모두 대문자로 단 원본은 불변

System.out.println(str.toUpperCase()); // 대문자

System.out.println(str.toLowerCase()); // 소문자

System.out.println(str);//원본은 그대루

 

//9. 문자열의 앞뒤 공백문자를 제거

str="Hello ";

System.out.println(str.equals("Hello"));

System.out.println("["+str+"]"); // 시각적으로 볼려고 띄어쓰기를

System.out.println("["+str.trim()+"]");

System.out.println(str.trim().equals("Hello"));

 

//10. 문자열의 특정문자를 다른 글자를 대처하여 새로운 문자열을 리턴해줌

 

str="Hello world! Hello android! noce world!"; //자동 new String()

System.out.println(str.replace('H','k')); //**많이 쓰는 명령어 H를 K로 바꿔주는거 문자열도 가능

System.out.println(str.replace("android", "ios")); //소대문자 잘 구분해서 해야된다

System.out.println(str.replace("Hello", "good")); //찾는 글자가 없으면 그냥 원본 글씨 그대로 출력 //비속어를 걸러낸다

 

//이를 이용하여 비속어들을 걸러냄.

 

System.out.println(str.replace("fuck!", "XXX")); //걸러주기는 하지만 원본은 그대루니까

str= str.replace("욕1", "ㅁㅁㅁ"); //이방법으로 최종 바꿔치기를 함

 

 

//문자열 안에 있는 공백 문자를 제거해야 하는 상황이 있다면??

System.out.println(str.replace(" ", ""));

 

//11.문자열을 특정 위치에서 잘라내기

 

String sss=str.substring(6); //6번 인덱스 위치부터 뒤에 문자열만 잘라서 리턴

System.out.println(sss);

 

String sss2=str.substring(6,12); //6번 인덱스 부터 12번 인덱스 전까지..

System.out.println(sss2);

 

 

//12.글씨의 대소비교[이름순으로 정렬...같은 기능 만들때]

char ch1= 'a';

char ch2= 'b';

System.out.println(ch1>ch2); //문자 비교 X ASCII번호 비교

 

String s5="aaa";

String s6="aab"; //-나오면 앞에 글자 +숫자가 나오면 뒤에 숫자

 

//System.out.println(s5>s6); //error 문자열은 주소라서 대소비교 x

System.out.println(s5.compareTo(s6));

 

//13. 문자열을 특정 글자 기준으로 여러개의 문자열로 분리해서 리턴해주는 기능

str="android,ios,window,linux,world";

String[] aaaa=str.split(","); //영어만 이렇게 끊는다 한글은 안됨 //리턴이 문자열 배열!

System.out.println(aaaa[0]);

System.out.println(aaaa[1]);

System.out.println(aaaa[2]);

System.out.println(aaaa[3]);

System.out.println(aaaa[4].length() );