개발자 미니민의 개발스터디

5. 문자열 클래스 메소드 (유용)

by mini_min

◾ 문자열 관련 메소드

◾ length() : 문자열 길이 

◾ substring(s,e) : s인덱스에서 e-1인덱스까지의 문자열

◾ charAt() : 문자열에서 특정 한 문자 출력

◾ startsWith() : 문자열이 특정 문자열로 시작하는지?

◾ endsWith() : 반대개념

◾ compareTo() : 문자열을 사전식으로 비교하여 차이를 반환(ASCII 코드 차이)

String s1 = "seoul korea";
String s2;
int n;

n = s1.length();
System.out.println("문자열 길이 : " + n); //11


//6인덱스부터 8인덱스까지 문자열 추출
//배열도 0부터 시작하기 때문에 6부터 시작(인덱스는 0부터 시작)
// substring(s,e) : s인덱스에서 e-1인덱스까지의 문자열
s2 = s1.substring(6,9);		//end 인덱스 - begin 인덱스 갯수만큼 출력
System.out.println(s2);  //kor

s2 = s1.substring(6); //6인덱스에서 끝까지 출력
System.out.println(s2); //korea


//문자열에서 특정 한문자 출력하고 싶음
char c = s1.charAt(6);
System.out.println(c);

System.out.println(s1.equals("seoul korea"));	//true
System.out.println(s1.equals("Seoul Korea"));	//false. 대소문자 구분
System.out.println(s1.equalsIgnoreCase("Seoul Korea")); 
    // true. 대소문자 구분 안함


// 문자열이 특정 문자열로 시작하는지 ?
System.out.println(s1.startsWith("seoul"));


// 문자열이 특정 문자열로 끝나는지 ?
System.out.println(s1.endsWith("korea"));

// 특정 문자열 비교
// 문자열은 < > == 으로 비교 불가
// compareTo() : 문자열을 사전식으로 비교하여 차이를 반환(ASCII 코드 차이)

System.out.println(s1.compareTo("seoul corea"));
    // 'k' - 'c' : 8 (c에서 k까지 8차이)
    // aabaaaaaa < abc

 

◾ equalsIgnoreCase() : 대소문자 구분 없이 동일한 문자열이 있는지 확인 ! TRUE / FALSE 값으로 나옴

END, end, End 등이 입력되면 do ~ while 문 종료 

do {
    System.out.println("이름은? ");
    name = sc.next();

    if(name.startsWith("김")) count++;

}while(!name.equalsIgnoreCase("end"));

 

◾ indexOf() : 특정 문자나 문자열이 몇번째 인덱스에 존재하는지 반환한다.

없으면 나오는 값은 -1

lastindex0f() 은 뒤에서부터 존재여부 확인한다.

replace() 는 첫번째 인자를 두번째 인자로 바꾼다. 

replaceAll()도 용도는 동일한데, 다른 점은 정규식 사용이 가능하다! 

 

💥 \\d 는 숫자 / \\s 는 공백(엔터, 탭포함) , | 는 또는 ! 

[0-9] 이렇게 숫자 표현 가능. 

숫자랑 영문자 없애고 싶으면? : s1.replaceAll("[0-9A-Za-z]", "")

\\w 는 영숫자 / \\W 는 영숫자 제외 나머지 제거

String s1 = "seoul korea";
String s2;
int n;

//index0f() : 특정 문자나 문자열이 몇번째 인덱스에 존재하는지 반환
// 없으면 -1 

n = s1.indexOf("seo");
System.out.println(n);	//0. 처음에 위치

n = s1.indexOf("KOR");  //-1. 없으니까
System.out.println(n);

n = s1.indexOf("ko");
System.out.println(n);  // 6

n = s1.indexOf("o", 3); //3 인덱스부터 검색
System.out.println(n);  // 두번째 o 자리가 출력

//lastindex0f() : 뒤에서 부터 특정 문자나 문자열이 몇번째 인덱스에 존재하는지 반환
n = s1.lastIndexOf("o"); //
System.out.println(n);  


s1 = "test.jpg";
s2 = s1.substring(s1.lastIndexOf(".")+1); //파일에서 확장자만 가져옴
System.out.println(s2);


s1 = "우리나라 대한민국 대한민국 만세";
// 대한이란 글자만 한글로

s2 = s1.replace("대한", "大韓");	//정규식은 사용불가
System.out.println(s2);

s2 = s1.replaceAll("대한", "大韓"); //정규식은 사용가능 (정규식 : 패턴)
System.out.println(s2);


// 정규식 패턴 - \\d : 숫자, \\s : 공백(엔터,탭포함), | : 또는 
s1 = "우리 123 나라 456 대한";
s2 = s1.replaceAll("\\d", ""); //숫자 제거
System.out.println(s2);


s2 = s1.replaceAll("\\d", "").replaceAll("\\s", "");
s2 = s1.replaceAll("\\d|\\s", "");//숫자랑 공백 삭제
System.out.println(s2);

//[0-9] : 숫자
s2 = s1.replaceAll("[2-5]", ""); //2~5상 숫자 제거
System.out.println(s2);


// 숫자랑 영문자 없애기
s1 = "우리12나라 ab대한XY민국";
s2 = s1.replaceAll("[0-9A-Za-z]", ""); //영문자(대소문자), 숫자 제거
System.out.println(s2);

s2 = s1.replaceAll("\\w", ""); // \\w : 영숫자
System.out.println(s2);

s2 = s1.replaceAll("\\W", ""); // \\w : 영숫자 제외 나머지 제거
System.out.println(s2);


// 영문자, 숫자, 대한 제거
s2 = s1.replaceAll("\\w|대한", "");
System.out.println(s2);
//[] 안에 있는 글자는 한글자 한글자를 나타낸다.

 

◾ ^:시작 $:마지막 +:하나이상을 의미

[^] : 부정을 의미한다.

String s, p;

boolean b;

//1~3자 이내의 숫자가 있는지 검사
p = "\\d{1,3}";		//최소 1개, 최대3개 // \\d{8} : 8글자
s = "12";
b = s.matches(p); //정규식 패턴에 일치하면 true
System.out.println(b);

s = "1234";
System.out.println(s.matches(p)); // false


// ^:시작 $:마지막 +:하나이상 
 p = "^[가-힣]+$";
 s = "홍ㅋ나";
 System.out.println(s.matches(p)); // false

 s = "홍길동";
 System.out.println(s.matches(p)); // true


 p = "010-\\d{4}-\\d{4}";
 s = "010-1111-1111";
 System.out.println(s.matches(p)); // true


 // 숫자가 아닌 것은 *로 치환 // 아닌 것은 대가로 안에 꺽새^ 주기
 s = "우리 12 abc 67 & 79";
 s = s.replaceAll("[^0-9]", "*");	//[^] : 부정
 System.out.println(s);

 

◾ format() 은 printf 와 유사하다. 

n = 12345;
s = String.format("%,d", n); //printf 와 유사
System.out.println(s);//세 자리마다 컴마

 

◾ split () 는 특정 패턴으로 문자열을 분리해서 배열로 알아서 반환해준다.

s = "자바,스프링,오라클,HTML";
String[] ss = s.split(","); // 특정 패턴으로 문자열을 분리하여 배열로 반환
for(String a : ss) {
    System.out.print(a + " ");
}
System.out.println();	//split <-분리할 때 사용 (,로 분리하도록 코드짬)

 

◾ 문자열을 입력 받아 문자열 중 대소문자 구분하지 않고 abc로 시작하는 문자열들의 갯수 카운트

Scanner sc = new Scanner(System.in);
String s;
int count = 0;

while(true) {
    System.out.println("문자열[종료: end] ? ");
    s = sc.next();
    if(s.equalsIgnoreCase("end")) {
        break;
    }

        //바꿔서 쉽게 카운트			//시작지점 0
    if(s.toLowerCase().indexOf("abc")==0) {
        count++;
    }

}

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기