GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the Java

String 메소드 / subString / charAt / split / contains / indexOf / matches / Tokeni

Backcoder 2022. 7. 4. 12:49

< String 클래스 >

- 본래 String 은 클래스다.
하도 자주사용되기 때문에 java 의 총애를 받아 쉬운문법을 사용할수 있도록 만들어졌다.

1. 쉬운 기본 표현
String s1 = new String( "AAA" );
(편하게 쓰렴)
=> String s1 = "AAA";

덧셈도 원래 객체는 안되는데 String 예외
Stirng s1 = " AAA" ;
String s2 = " BBB";
s1 + s2 => AAABBB
( 이게 사실은 s1.concat(s2); 이렇게 해야 되는거 )

2. String 메소드

equals / equalsIgnoreCase - 문자열 '내용' 비교
toUpperCase / toLowerCase - 대/소문자화
concat - 문자열 2개를 1개로 합침 ( 그냥 + 로 편히 쓰거라 )
length - 문자열 갯수

< split > - 문자열 분리 => String[ ] 배열로 return 받음

String . split ( "구분자" ); => 문자열 분리
String A = OXOOXOOOO;

Stirng[ ] spl = A.split( "X" );
=> spl[0] = "O";
spl[1] = "OO";
spl[2] = "OOOO";

// 구분자로 특수문자를 쓰고 싶을땐 [ ]로 감싸준다 => ( " [특수문자] " )
특수문자중에 Regular Expression에 있는것들 < . + * ? >=> 특수문자라고 표시해줘야함
(1). [ ] 묶어서 표현
(2). split( "\\?" ) 역슬래쉬 두번

 

- split 하면서 바로 [0] Index 번호 줘서 사용할  수 있다. 
String id = "June 1111".split(" ")[0]
String pw = "June 1111".split(" ")[1]


< split 구분자 여러개 쓰기 >
split("( - | / | : | | , | [+])");
구분자 => - / : 공백 , +

< subString > - " 슬라이싱 "(Slicing)한다 => 문자열에서 일부 문자만 추출

String s = "javaprogramming";
s.subString(0, 4); => 0번 인덱스부터 4번인덱스 '전'까지 (0 1 2 3 )
인덱스 사이의 문자열 추출
=> java

s.substring(4); => 4번 인덱스부터 ~ 마지막까지
=> programming

< charAt > - " 인덱싱 "(Indexing)한다 => 해당 index 의 문자 1개만 검색

String s = "java";
s.charAt(0);
=> 'j'

<String.valueOf>
char 딱 한글자를 String 으로 집어넣으려면 String.valueOf 가 필요하다.
String initial = String.valueOf(middle.charAt(0));


-- charAt 으로 int 와 == 동일값 확인하기 > => 유니코드 활용

String A = "1234";
if (( A.charAt( 1 ) - '0') == 2 ) { count++; }

// char int문자에 -48 ( = -'0' ) 을 해주면
=> 실제 int 값이 나온다. => 이용해서 char 과 int 를 비교 가능
( char '2' = 50 ) => - 48 => 2 // int 2 == char '2'


< contains > - 문자열이 해당문자열 내용을 포함 하고 있는지 (Boolean) / equals 의 약한버전

String s = "javaprogram";
s.contains("program")
=> true

< indexOf > - 몇 번 인덱스부터 있는지 알려줘

String s = "javaprogrampower";
s.indexOf("pr");
=> 4 ( 4번 인덱스부터 있다 )
s.indexOf("br");
=> -1 ( 없다 : -1 로 표시 )
//이걸 이용하면, contains 로도 사용할 수 있다.




< String.matches( " " ) > regex 레그익스

=> java.regex.Pattern 사용한다. ( RegularExpression 정규표현식. 컴퓨터 공용표현 )

String phone = "010-2345-5678";
입력 - 010이345오678 이렇게 들어오면 X


=> Pattern (규칙) 을 정해놓는다. ( java.regex.Pattern )

=> String.matches( " " ) 메소드 사용! (Boolean) 타입 => false 면 다시적게끔 만들기

phone.matches("010-[0-9]{3,4}-[0-9]{4}" )
[0-9] 0부터 9까지 올수있다.
{0,3} 최소 a 개 부터 b개 까지 {횟수}
그외 박아놓은 숫자나 - 기호등은 고정된 format

[a-z] 소문자
[A-Z] 대문자
[A-z] 알파벳문자
[A-z0-9] 숫자든 알파펫 문자든 전체 가능 (띄어쓰기안하고 바로붙여서)
[A-z0-9가-힣]
[가-힣] 한글문자

(010 | 011) 010이나 011중 하나만 가능 (괄호이용)

\\d - 모든 숫자
\\w - 숫자와 문자 포함해서 모든 문자들 (한글 미포함)
. {3,5} 모든문자 3~5횟수 (한글 특수문자까지 포함)


{ 회수 주기 }
[+] 최소 한개이상와야한다
"010-35-[0-9]+ " => 최소 한개 이상
[*] 횟수 무제한. 0~무한대
"010-35-[0-9]* " => 안와도 되고 / 무한대로 와도되고
[?] 횟수 0회 혹은 1회
[0-9]? // (Y|N)? 이러면 안할수도있어서, (Y|N){1} 이렇게해야겠지
{3, } 최소3 회 이상

 

 

[ replaceAll에서 regex 주기 ] 

- 전화번호 뒷 번호만 표시 

01033337777 => *******7777

// regEX
//return phone_number.replaceAll(".(?=.{4})", "*");
// replaceAll("regEX 로 repalce할 문자열 선택", *로 replace )
// 임의의문자열 . 을 * 로 모두 replace
// (?= X )뒤에서부터 X 문자열은 제외하겠다.
// .{4} 임의의문자열 4자리 

 

 

-  split 에서는 pattern 사용 가능 / Tokenizer 에서는 pattern 사용 불가능 

 




< StringTokenizer > 문자열 쪼개는 역할만 있는 클래스

token - 더이상 쪼갤 수 없는 기본 단위

StringTokenizer tk = new StringTokenizer( 쪼갤문자열, "구분자" )
- 기본 default 구분자는 " " 공백 한칸이다. (스페이스)
- 여기 구분자에 " -,: " 특수문자를 여러개 동시에 적용시킬수있다. (띄어쓰기안하고 그냥붙여서 준다. 공백도 가능)
String a = "asf-as,wqf asf:saf"
StringTokenizer tk = new StringTokenizer(a," -,:");
while (tk.hasMoreTokens()){
String s = tk.nextToken();
System.out.println(s);}




3. Char 배열을 String으로 한방에 ( String 생성자 이용 )

char c1[ ] = { 'a', 'b', 'c', 'd' }
String sc = new String ( c1 ); => "abcd"

- byte 배열도 Char배열로 인식해서 가능 (유니코드)
byte b[ ] = { 65, 66, 67 ,68 }
String sb = new String( b ); => "ABCD"