9.28 11-2 StringMethod
주요 쓰는 StringMethod
String str1 = "Welcome To Java!"; => 이 변수들은 밑에서 계속 쓰임
String str2 = "안녕 자바!";
1 .int length( ) : 문자열 길이 변환
System.out.println("str1의 문자열 길이:"+str1.length());
System.out.println("str2의 문자열 길이:"+str2.length());
2 .charAt(int index)
:문자열에서 index에 해당하는 문자 하나를 반환 (index는 0부터시작)/
문자들을 한 글자씩 쪼개서 한 글자를 이용할 때!
System.out.println("str1의 5번째 문자:"+str1.charAt(4));
System.out.println("str2의 5번째 문자:"+str2.charAt(4));
------>요렇게 쓰여요
for(int i =0 ; i<str1.length();i++)
System.out.printf("%d인덱스에 해당하는 문자:%c%n",i,str1.charAt(i)); =>0번째부터 해당문자를 출력해줌
String jumin = "012345-1234567";
System.out.println(jumin.charAt(7)=='1'? "남자":"여자");
int lastJumin = 1234567;
Integer intObj = lastJumin;
System.out.println(intObj.toString().charAt(0)== '1'? "남자":"여자" );
System.out.println(Integer.toString(lastJumin).charAt(0)== '1'? "남자":"여자");
3 .codePointAt 해당문자의 아스키(유니)코드 값을 알아낼때 사용하는데 그거보단...
boolean isNumber(String value) {
for(int i=0 ; i<value.length();i++){
if(!(value.codePointAt(i) >= '0' && value.codePointAt(i)<='9'))
return false;
}
return true;
}
요렇게 for 문이랑 같이 써서 숫자인지 아닌지 판단할때 사용한다!
System.out.println("str1의 4번째 문자의 아스키(유니)코드 값:"+str1.codePointAt(3));
System.out.println("str2의 4번째 문자의 아스키(유니)코드 값:"+str2.codePointAt(3));
System.out.println(CommonUtil.isNumber("1004"));
System.out.println(CommonUtil.isNumber("100사"));
4 .compareTo()
정렬할 때 사용 (오버라이딩 메소드) 두문자비교는 .equals( )를 쓰셈
String str3 = "ABc";
String str4 = "ABC";
System.out.println(str3.compareTo(str4)); =>32가 출력 ,두 코드값의 차이임
System.out.println(str4.compareTo(str3)); =>32지
System.out.println("ABCD".compareTo("ABCD") == 0 ? "문자열이 같다" : "문자열이 다르다");
System.out.println("ABCD".compareTo("A")); // 코드값의차이 인지 문자열길이의 차이인지 값만 봐서는 뭔지 모름
System.out.println("A".compareTo("ABCD"));
솔직히 이건 쓸 일이 있을지 의문임......
5 .concat(" "): 문자열연결
System.out.println("JAVA".concat(" WORLD").concat(" HI"));
System.out.println("JAVA"+" WORLD"+" HI"); => 둘다 JAVA WORLD HI 요렇게!
6 .contains( ) : 특정문자열 포함여부
System.out.println(str1.contains("To")); =>true/false로 출력 됨
System.out.println(str1.contains("to"));
---------------요렇게 잘 쓰여용
String email = "kim@nate.com";
System.out.println(email.contains("@") ? "이메일 형식이다" :"이메일 형식이 아니다");
7 .valueOf( ) 앞에꺼랑 잘 비교!! 요건 static이 붙어있음 입력값이 있다!!!!!
char형 배열을 string형으로 변환하는 메소드 == copyValueOf써도 됨
char [ ] chArr = {'A','C','A','D','E','M','Y'};
System.out.println(String.copyValueOf(chArr));
System.out.println(String.copyValueOf(chArr,3,4)); //3번방부터 4개가지고 이용
System.out.println(String.valueOf(chArr)); // 위랑 똑같다
System.out.println(String.valueOf(chArr,3,4));
메소드 사용 안하고 char형 배열에 저장된 문자들을 문자열로 반환하는 방법
String plus = "" ;
for(int i =0 ; i<chArr.length ; i++) plus += chArr[ i ];
System.out.println(plus); =>누적시키기!!!
8 .char[ ] toCharArray( ): 문자열을 char형으로 배열전환
chArr ="가나다라".toCharArray(); => 0번방에 "가",1번방에 "나"
for(int i =0; i<chArr.length;i++) System.out.printf("chArr[%d]:%-2c",i,chArr[i]);
9 .boolean endsWith( ) 문자열이 특정문자열로 끝나면 true반환
System.out.println("www.nate.com".endsWith("com"));
System.out.println("www.nate.com".endsWith("co.kr"));
10 .boolean startsWith() 문자열이 특정문자열로 시작나면 true 반환
System.out.println("www.nate.com".startsWith("www"));
System.out.println("www.nate.com".startsWith("http")); =>false
System.out.println("www.nate.com".startsWith("nate",4)); =>true
11.String. format( ) 출력형식을 지정하여 문자열로 반환
이거... 밑에꺼 두개 비교하는게 더 이해가 쉬울거임.. printf쓰면 줄바꿈기능이 없어서 뒤에 꼭 %n붙여야하는데 String.format을 쓰면 println 기능을 쓰면서() 안의 형식은 printf(변환지시어 사용)형식으로 쓸 수 있음!!
System.out.printf("국어:%d,영어:%d,수학:%d,평균:%.2f%n",90,90,90,270/3.0);
System.out.println(String.format("국어:%d,영어:%d,수학:%d,평균:%.2f",90,90,90,270/3.0));
=>국어:90,영어:90,수학:90,평균:90.00 문자열임
12.getBytes(): 문자열을 byte형 배열로 반환해줌 (아스키값으로!)
byte [ ] by = "ABCD".getBytes(); //0번방은 a아스키값
for(int i =0;i <by.length; i++) {
System.out.println(String.format("by[%d]:%d",i,by[i])); => 아스키로65 66 67 68
System.out.println(String.format("by[%d]:%c",i,by[i])); => 해당문자로 A B C D
}
13 .indexOf( ) 헷깔
문자열에서 특정문자열의 시작인덱스번호 반환(왼쪽부터), 특정문자열 없는경우엔 -1반환
System.out.println("JAVA".indexOf("AVA")); =>1 출력
System.out.println("JAVA".indexOf("A")); =>1
System.out.println("JAVA".indexOf("VA")); =>2
System.out.println("JAVA".indexOf("aVA")); =>-1
jumin = "1232145321456-1234567";
int index=jumin.indexOf("-")+1;
System.out.println(jumin.charAt(index)=='1'? "남자":"여자");
14 .lastIndexOf ( ) 헷깔
이번엔 뒤에서부터(오른쪽부터)
System.out.println("JAVA".lastIndexOf("AVA")); =>1
System.out.println("JAVA".lastIndexOf("A")); =>3
System.out.println("JAVA".lastIndexOf("VA")); =>2
System.out.println("JAVA".indexOf("aVA")); => -1
System.out.println("my.file.txt".lastIndexOf(".")); =>7
15. replace( ) 문자바꾸기 정규표현식은 못씀 (정규표현은 나중에)
System.out.println(str1.replace('T', 'G')); =>Welcome Go Java!
String str5=str1.replace('T', 'G');
System.out.println(str1); String에 저장된 데이터는 절대불변! 위에꺼를 뭐어디다 담지 않았음 즉 메모리생성이 안됨 걍 바로 출력 =>str1은 여전히 Welcome To Java!로 출력 System.out.println(str5); =>Welcome Go Java!
System.out.println(str1); =>Welcome To Java!
System.out.println(str1.replace("Java", "Korea")); =>Welcome To Korea!
System.out.println(str1.replace("Hello", "안녕")); =>Welcome To Java! :없는 문자열은 무시
System.out.println(str1.replace("o", "a")); =>Welcame Ta Java!
//replaceAll은 일반문자열은 물론 정규표현식 형태문자열도가능 정규표현은... 아직몰러
System.out.println(str1.replaceAll("o", "a")); =>Welcame Ta Java!
String password = "ABCD1234";
System.out.println("비밀번호:"+password.replaceAll("[1-9]", "*"));
=>비밀번호:ABCD**** 출력
16 .split ( ): 문자열을 특정 구분자로 분리해서 String형으로 반환, 구분자 없으면 걍 통째로변환
String tel="010-1234-5678";
String[ ] strArr= tel.split("-");
for(int i=0;i<strArr.length;i++)
System.out.println(String.format(("strArr[%d]:%s"), i,strArr[i]));
=> strArr[0]:010
strArr[1]:1234
strArr[2]:5678
String today = "2022.09.28";
strArr = today.split("\\."); .은 정규표현식이라서 사용 못함 ==> \. 은 이스케이프문자가 아니라는 \ 즉 \\.로 사용
System.out.println(strArr.length); =>이거 출력 안나옴
for(int i=0 ; i<strArr.length ; i++)
System.out.println(String.format(("strArr[%d]:%s"), i,strArr[i])); =>이제야출력strArr[0]:2022 strArr[1]:09 strArr[2]:28
정규표현식으로 해보자 안배웠지만 우선 해봐
String regex="AB12CDG2EF3";//구분자가 없는 문자열
String[] reArr=regex.split("[0-9]");
for(int i=0;i<reArr.length;i++)
System.out.println(String.format(("reArr[%d]:%s"), i,reArr[i]));
17 .substring( ) 문자열 시작 인덱스부터 끝까지추출
System.out.println("Welcome".substring(3)) ; => come
+++++ String filename = "my.file.homework.ppt";
int beginIndex = filename.lastIndexOf(".")+1; .lastlndecOf는 뒤에서부터 원하는 문자열시작인덱스번호 출력!
System.out.println("확장자:"+filename.substring(beginIndex));
=> 확장자:ppt 출력
18. substring(시작인덱스 , 끝인덱스 )
System.out.println("kim@nate.com".substring(4, 8));
문 @와.사이의 문자열을 추출하여 출력하라
String[ ] emails= {"a@b.c","kim@nate.com","chio@cyworld.com","park@naver.com"};
for(int i=0; i<emails.length; i++) {
beginIndex=emails[i].indexOf("@")+1;
int endIndex=emails[i].indexOf(".");
System.out.println(emails[i].substring(beginIndex, endIndex));
}
19.toLowerCase() : 대문자를 소문자로
System.out.println("대문자로 변경:"+str1.toUpperCase());
System.out.println("소문자로 변경:"+str1.toLowerCase());
대소문자 구분없이 아이디체크하기 회원아이디가 소문자 "park"이라고 가정
Scanner sc=new Scanner(System.in);
System.out.println("아이디를 입력하세요?");
String nick = sc.nextLine();
방법1 equalsIgnoreCase(anotherString) 사용
System.out.println("paRk".equalsIgnoreCase(nick) ? "회원" : "비회원 혹은 아이디 잘못");
방법2 toLowerCase()나 toUpperCase()사용
System.out.println("PARK".equals(nick.toUpperCase().trim())?"회원":"비회원 혹은 아이디 잘못");
System.out.println("park".equals(nick.toLowerCase().trim())?"회원":"비회원 혹은 아이디 잘못");
21. trim()양쪽 끝에 공백 제거, 문자열은 값 비교전 항상 trim()해라
System.out.println("트림전:X"+" J A V A "+"Y");
System.out.println("트림후:X"+" J A V A ".trim()+"Y");// 양끝공백만 제거
=>트림전: X J A V A Y
트림후: XJ A V AY