기초JAVA 19강 - String 클래스

라이브러리 : 누군가가 만들어놓은 클래스인데 다른사람이 사용할 수 있게 만들어놓은 클래스
API : 라이브러리를 사용할 수 있는 방법을 만들어 놓은 것
String 클래스도 라이브러리

String

  • 여러개의 문자를 사용하기 쉽게 만들어 놓은 클래스

String의 주요 메서드

  • equals() : 문자열의 내용이 같은지 반환한다.
  • length() : 문자열의 길이를 반환시킨다.
  • charAt() : 특정 인덱스에 위치한 문자를 반환한다.
  • substring() : 문자열의 특정 부분을 잘라서 반환한다.
  • indexOf() : 문자열 내의 특정 문자의 인덱스를 반환한다.
  • contains() : 문자열이 특정 문자열을 포함하고 있는지 여부를 반환한다.
  • split() : 문자열을 특정 문자를 기준으로 나누어 배열형태로 반환한다.
  • trim() : 문자열 앞뒤의 공백을 제거해 반환한다.
  • valueOf() : 다른 타입의 데이터를 문자열로 변환해 반환한다.

boolean equals = "문자열".equals("문자열");//.equals앞의 타입은 반드시 String 타입이어야 함.
-charAt()

	String str1 = "문자열";
	String str2 = null;
	System.out.println(str1.equals(str2));
	System.out.println(str2.equals(str1)); //null값에는 참조변수를 쓸 수 없음
	
	String str = "12345";
	int length = str.length();
	for(int i = 0; i < length; i++) {
		char charAt = str.charAt(i);
		System.out.println(charAt);
	}

-charAt()
//문자열 뒤집기

	String rev = "";
	for(int i = str.length() - 1; 0 <= i; i--) {
		rev += str.charAt(i);
	}
	System.out.println(rev);
	

-indexOf()

        str = "0123456789";
        String sub1 = str.substring(3); //3번 인덱스부터 잘라서 반환한다.
        System.out.println(sub1);
        String sub2 = str.substring(5,8); //5번 인덱스부터 8번 인덱스까지 잘라서 반환한다.
        System.out.println(sub2);//앞은 시작인덱스, 뒤는 끝나는 인덱스 
        but 끝나는 인덱스는 포함하지 않음(7까지만 반환)        
    
    str = "수박 오렌지 귤 블루베리";
	int index = str.indexOf("오렌지");//시작하는 인덱스를 반환
	System.out.println(index);
	

//substring과 indexOf를 조합해서 문자열 자르기

	String[] menu = {//이 중에서 이름 혹은 가격만 가져오고 싶을 때
			"수박 20000원",
			"오렌지 100000원",
			"귤 500원",
			"블루베리 3000원"
	};
	
	for(int i =0; i < menu.length; i++) {
		String name = menu[i].substring(0, menu[i].indexOf(" "));
		System.out.println(name);
	}
	
	for(int i = 0; i < menu.length; i++) {
		int price = Integer.parseInt(menu[i].substring(menu[i].indexOf(" ") +1
                                                              ,menu[i].indexOf("원"))); 
		System.out.println(price);
	}
	
	str = "abcd";
	boolean contains = str.contains("c");
	System.out.println(contains);
	

//오렌지가 메뉴의 몇번 인덱스에 있는지 찾기

	for(int i = 0; i < menu.length; i++) {
		if(menu[i].contains("오렌지")) {
			System.out.println("오렌지는 " + i + "번 인덱스에 있습니다.");
		}
	}
	
	str = "a/b/c";
	String[] split = str.split("/"); //파라미터 값을 기준으로 문자열을 나눔 
                                          => 배열로 만들어서 배열을 return	
	System.out.println(Arrays.toString(split));
	

//메뉴명과 가격 나누기

	for(int i = 0; i < menu.length; i++) {
		String[] arr = menu[i].split(" ");
		System.out.println("메뉴명 : " + arr[0] + " / 가격: " + arr[1]);
	}
    
str = "    문 자 열 "; //문자열 사이의 공백은 없애주지 않음
      -> 사용자의 실수로 공백을 입력했을 때 방지하는 용도

	String trim = str.trim();
	System.out.println("["+str+"] -> [" + trim +"]");
	
	String id = " myid";
	String password = "mypassword ";
	System.out.println(id);
	System.out.println(password);
	System.out.println(id.trim());
	System.out.println(password.trim());
	
	
	int number = 10;
	str = number + ""; //int타입을 string타입으로 변경
    			    (java에서는 문자열을 더하면 String타입으로 바뀜)
	str = String.valueOf(number); //valueOf는 클래스이름을 참조변수로 사용
	System.out.println(str);
	
	
}

문자열 추가할 때 초 세기

public static void main(String[] args) {
        String str = "a"; //String 클래스는 문자열 변경을 할 때 객체를 새로 만든다.

	long start = System.currentTimeMillis();
	for(int i = 0; i < 200000; i++) { //숫자가 늘어날수록 시간은 더 늘어난다.
		str += "a";
	}
	long end = System.currentTimeMillis();
	System.out.println(end - start + "ms" );
	

StringBuffer를 이용한 초 세기

	StringBuffer sb = new StringBuffer("a");
    //문자열을 추가해야할 때 StringBuffer를 사용하기.
	long start = System.currentTimeMillis();
	for(int i = 0; i < 200000; i++) {
		sb.append("a");
	}
	long end = System.currentTimeMillis();
	System.out.println(end - start + "ms");
	
}        

//숫자를 입력받아 입력받은 숫자에 3자리 마다 콤마(,)를 붙여 출력해주세요.
//내 답

 public static void main(String[] args) {
        
        //123456789
    
       String input = ScanUtil.nextLine();

	String rev = "";
	
	//1. 거꾸로 숫자를 돌린다. 
	for(int i = input.length() - 1 ; i >= 0;  i--) {
		rev += input.charAt(i);
	}
	input = "";
	
	//2. 세번째 자리마다 ,를 추가한다. //3. 다시 원상복귀한다.
	for(int i = rev.length() - 1 ; i >= 0;  i--) {
		input += rev.charAt(i);
		if(i % 3 == 0) {
			input += ",";
		}
	}
	
	//4. ,가 끝에 붙어있으면 제거한다.
	if(input.charAt(input.length() - 1) == ','){
		input = input.substring(0,input.length() - 1);
	}
	System.out.println(input);
	
	

//선생님답

	System.out.println("숫자입력>");
	String number = ScanUtil.nextLine();
	String number2 = "";
	
	int count = 0;
	for (int i = number.length() - 1; i >= 0; i--) {
		number2 = number.charAt(i) + number2; //새로운 변수의 앞에 숫자를 더함
		count++;
		if(count % 3 == 0 && count != number.length()) {
        //문자의 길이와 변수가 같으면 ,를 입력하지 않음.
			number2 = "," + number2;
		}
	}
	System.out.println(number2);    
    
    

정규표현식 : 문자열의 패턴을 검사하는 표현식 - 회원가입 할 때 사용
^ 뒷 문자로 시작
$ 앞 문자로 종료
. 임의의 문자(줄바꿈 제외)
* 앞문자가 0개 이상
+ 앞문자가 1개 이상
? 앞문자가 없거나 1개
[] 문자의 집합이나 범위([a-z]:a부터 z까지, [^a-z]:a부터 z가 아닌 것)
{} 앞 문자의 개수({2}:2개, {2,4}:2개 이상 4개 이하)
() 그룹화(1개의 문자처럼 인식)
| OR연산
\s 공백, 탭, 줄바꿈
\S 공백, 탭, 줄바꿈이 아닌 문자
\w 알파벳이나 숫자
\W 알파벳이나 숫자가 아닌 문자
\d 숫자
\D 숫자가 아닌 문자
(?i) 뒷 문자의 대소문자 구분 안함
\ 정규표현식에서 사용되는 특수문자 표현

 String str = "abc1234";//정규표현식을 사용할 때도 문자열을 사용	
        String regex = "[a-z]{3}[0-9]{1,3}"; //정규표현식에는 마음대로 공백을 넣을 수 없음
         -> 넣으면 문자열 안에 공백이 들어가야 한다는 뜻
        String regex = "[a-z0-9]+";
        String regex = "\\w*"; //알파벳이나 숫자가 0개 이상 온다. \를 표현하기 위해 앞에 \를 써줘야 한다.
	
	Pattern p = Pattern.compile(regex);//Pattern은 정규표현식을 해석해서 문자열을 비교하는 클래스 
	Matcher m = p.matcher(str); //내가 원하는 패턴만 통과할 수 있도록 만드는 게 중요함.
	System.out.println(m.matches());//정규표현식과 맞는지 true or false를 반환
	
	//아이디, 전화번호, 이메일주소의 유효성을 검사하는 정규표현식을 만들어주세요.
	String id = "\\w{5,15}";
	String hp = "\\d{10,11}";
	String email = "\\w{5,15}@$"+"[a-z]+"+"^\\.[a-z]{2,4}";
	
	email = "/^[0-9a-zA-Z]([-_\\.]?[0-9a-zA-Z])
    *@[0-9a-zA-Z]([-_\\.]?[0-9a-zA-Z])*\\.[a-zA-Z]{2,3}$/i;";

좋은 웹페이지 즐겨찾기