기초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;";
Author And Source
이 문제에 관하여(기초JAVA 19강 - String 클래스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gksmf6699/기초JAVA-19강-String-클래스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)