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);
'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 |