1. String 메소드
- length(): 문자열의 길이를 반환하는 메서드 - int
String text = "Hello, World!"; int length = text.length(); System.out.println(length);// 출력: 13
- toLowerCase(): 문자열을 소문자로 변환하는 메서드
String text = "Hello, World!"; String lowerText = text.toLowerCase(); System.out.println(lowerText);// 출력: hello, world!
- toUpperCase(): 문자열을 대문자로 변환하는 메서드
String text = "Hello, World!"; String upperText = text.toUpperCase(); System.out.println(upperText);// 출력: HELLO, WORLD!
- trim(): 문자열의 앞뒤에 있는 공백을 제거하는 메서드
String text = " Hello, World! "; String trimmedText = text.trim(); System.out.println(trimmedText);// 출력: Hello, World!
- split(): 문자열을 특정 구분자를 기준으로 나누어 배열로 반환하는 메서드
String text = "apple,banana,orange"; String[] fruits = text.split(","); for (String fruit : fruits) { System.out.println(fruit); } // 출력:// apple// banana// orange
- replace(): 문자열 내의 특정 부분 문자열을 다른 문자열로 대체하는 메서드
String text = "Hello, World!"; String newText = text.replace("World", "Java"); System.out.println(newText);// 출력: Hello, Java!
- startsWith(): 문자열이 특정 문자열로 시작하는지 여부를 확인하는 메서드 - boolean
String text = "Hello, World!"; boolean startsWithHello = text.startsWith("Hello"); System.out.println(startsWithHello);// 출력: true
- endsWith(): 문자열이 특정 문자열로 끝나는지 여부를 확인하는 메서드 - boolean
String text = "Hello, World!"; boolean endsWithExclamation = text.endsWith("!"); System.out.println(endsWithExclamation);// 출력: false
- charAt(): 문자열에서 특정 인덱스에 위치한 문자를 반환하는 메서드 - char
String text = "Hello, World!"; char character = text.charAt(4); System.out.println(character);// 출력: o
- indexOf(): 문자열에서 특정 부분 문자열의 첫 번째 등장 위치를 반환하는 메서드 - int
String text = "Hello, World!"; int index = text.indexOf("World"); System.out.println(index);// 출력: 7
- substring(): 문자열에서 특정 범위의 부분 문자열을 반환하는 메서드
String text = "Hello, World!"; String substring = text.substring(7, 12); System.out.println(substring);// 출력: World
- concat(): 두 개의 문자열을 연결하는 메서드
String text1 = "Hello"; String text2 = "World!"; String concatenatedText = text1.concat(" ").concat(text2); System.out.println(concatenatedText);// 출력: Hello World!
- isEmpty(): 문자열이 비어있는지 여부를 확인하는 메서드 - boolean
String text = ""; boolean isEmpty = text.isEmpty(); System.out.println(isEmpty);// 출력: true
- equals(): 두 개의 문자열이 동일한지 비교하는 메서드 - boolean
String text1 = "Hello"; String text2 = "Hello"; boolean isEqual = text1.equals(text2); System.out.println(isEqual);// 출력: true
- contains(): 문자열이 특정 부분 문자열을 포함하는지 여부를 확인하는 메서드 - boolean
String text = "Hello, World!"; boolean containsHello = text.contains("Hello"); System.out.println(containsHello);// 출력: true
빈 칸도 자리 자치
2. 파싱이란? - 구문분석. 번역?
주어진 데이터를 해석하고 원하는 형식으로 변환하는 과정. 일반적으로 문자열을 다른 데이터 타입으로 변환하거나, 구조화된 데이터에서 원하는 정보를 추출하는 등의 작업에 사용
문자열 파싱을 수행하는 일부 기법과 메서드
- Integer.parseInt(String): 문자열을 정수로 파싱
String str = "123"; int number = Integer.parseInt(str); System.out.println(number);// 출력: 123
- Double.parseDouble(String): 문자열을 실수로 파싱
String str = "3.14"; double number = Double.parseDouble(str); System.out.println(number);// 출력: 3.14
- SimpleDateFormat.parse(String): 지정된 형식의 날짜 문자열을 Date 객체로 파싱
String str = "2021-09-10"; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = format.parse(str); System.out.println(date);// 출력: Fri Sep 10 00:00:00 GMT 2021
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import 해야함 > 해당 줄에 가서 alt + enter... 한번에 하는 방법은 없나?
- StringTokenizer 클래스: 문자열을 구분자(delimiter)를 기준으로 분리하여 토큰(token)으로 파싱
String str = "apple,banana,grape"; StringTokenizer tokenizer = new StringTokenizer(str, ","); while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); System.out.println(token); } // 출력:// apple// banana// grape
토큰 : 문자열을 작은 조각으로 나누는 단위
* 쉼표(,)를 구분자로 사용하여 토큰으로 분리한다면 "apple", "banana", "grape"라는
세 개의 토큰이 생성
* 토큰은 문자열 처리에서 유용하게 사용되며, 데이터를 분석하거나 필요한 정보를
추출 하는 등 다양한 상황에서 활용
- 정규 표현식(Regular Expression): 문자열을 특정 패턴에 맞게 파싱 Pattern과 Matcher 클래스를 사용하여 정규 표현식을 처리할 수 있다.
String str = "Hello, 2021! It's a great year."; Pattern pattern = Pattern.compile("\\d+");// 숫자에 대한 정규 표현식 패턴 Matcher matcher = pattern.matcher(str); while (matcher.find()) { String number = matcher.group(); System.out.println(number); } // 출력:// 2021
정규표현식이란?
Pattern pattern2 = Pattern.compile("\\d{3}-\\d{4}-\\d{4}");
- split() 메서드는 문자열을 특정 구분자(delimiter)를 기준으로 분리하여 문자열 배열로 반환하는 기능 - split = 메서드를 쪼개는 역할
String str = "apple,banana,grape"; String[] fruits = str.split(","); for (String fruit : fruits) { System.out.println(fruit); } // 출력: // apple // banana // grape
파싱이 제대로 됐다 : 그 언어의 오브젝트로 바뀌면 됐다.
3. 딜리미터와 토큰의 차이
딜리미터(Delimiter)는 데이터를 구분하는 역할. 예를 들어, "사과,바나나,오렌지"라는 문자열이 있다면 쉼표(,)가 딜리미터. 이를 기준으로 문자열을 구분하여 "사과", "바나나", "오렌지"로 나눌 수 있다. 토큰(Token)은 딜리미터를 기준으로 분리된 데이터의 작은 단위를 의미. 위의 예시에서 "사과", "바나나", "오렌지"는 각각 토큰이 된다. 이렇게 토큰은 독립적인 의미를 가지고 있을 수 있다. 간단히 말하면, 딜리미터는 데이터를 구분하는 역할을 하고, 토큰은 딜리미터를 기준으로 분리된 의미 있는 작은 단위.
3. String 숙제
문제 1)
package ex08.example; public class StringEx01 { public static String encoding(String data) { return ""; } public static String decoding(String encodingData) { return ""; } public static void main(String[] args) { String data = "AABBBCCCCDDDDD"; // Byte -> 14Byte // 인코딩 A2B3C4D5 // 디코딩 AABBBCCCCDDDDD } }
답
package ex08.example; public class StringEx01 { public static String encoding(String data) { int num = 1; String result = ""; String[] arr = data.split(""); for(int i = 1; i<data.length(); i++){ if(!arr[i-1].equals(arr[i])){ result = result + arr[i-1] + num; num = 1; continue; } num++; } return result; } public static String decoding(String convert) { String result = ""; String[] arr = convert.split(""); for(int i = 1; i<convert.length(); i++){ String s = arr[i-1]; int num = Integer.parseInt(arr[i]); for (int j = 0; j < num; j++) { result += s; } i++; } return result; } public static void main(String[] args) { String data = "AABBBCCCCDDDDD"; // Byte -> 14Byte String convert = "A2B3C4D5"; //Byte -> 8Byte // 인코딩 A2B3C4D5 data += "."; System.out.println(encoding(data)); // 디코딩 AABBBCCCCDDDDD System.out.println(decoding(convert)); } }
문제 2)
package ex08.example; public class StringEx02 { public static void main(String[] args) { // 문서 // ? 뒤를 쿼리스트링이라고 한다. // 쿼리스트링은 키=값 형태의 데이터의 집합이다. // 키=값이 여러개일때는 &로 구분한다. String url = "http://www.naver.com?username=ssar&password=1234"; // username값과, password값 찾아보기 String username; String password; } }
username(키) = ssar(값)
내 답
int urlLgth = url.length(); System.out.println(urlLgth); int index = url.indexOf("username"); System.out.println(index); String urlTokenLength = url.substring(21, 48); System.out.println(urlTokenLength); System.out.println(); StringTokenizer token = new StringTokenizer(urlTokenLength, "&"); while (token.hasMoreTokens()) { String token2 = token.nextToken(); System.out.println(token2);
package ex08.example; public class StringEx02 { public static void main(String[] args) { // 문서 // ? 뒤를 쿼리스트링이라고 한다. // 쿼리스트링은 키=값 형태의 데이터의 집합이다. // 키=값이 여러개일때는 &로 구분한다. String url = "http://www.naver.com?username=ssar&password=1234"; String[] splitUrl = url.split("\\?|&"); // username값과, password값 찾아보기 String username = splitUrl[1].replace("username=", ""); String password = splitUrl[2].replace("password=", ""); System.out.println(username); System.out.println(password); } }
문제 3)
package ex08.example; class ContractInfo { private int money; private final String addr; private String name; private String tel; private String email; public ContractInfo(int money, String addr, String name, String tel, String email) { this.money = money; this.addr = addr; this.name = name; this.tel = tel; this.email = email; } @Override public String toString() { return "ContractInfo{" + "money=" + money + ", addr='" + addr + '\'' + ", name='" + name + '\'' + ", tel='" + tel + '\'' + ", email='" + email + '\'' + '}'; } public int getMoney() { return money; } public String getAddr() { return addr; } public String getName() { return name; } public String getTel() { return tel; } public String getEmail() { return email; } } public class StringEx03 { public static void main(String[] args) { // 문서 데이터는 : 으로 구분된다. // 0 : 계약금 // 1 : 주소 // 2 : 이름 // 3 : 전화번호 // 4 : 이메일 String data = "100:서울분당:이창호:01033338888:hello@nate.com"; String parse[] = data.split(":"); String[] parse = data.split(":"); 무슨 차이? } }
답
String data = "100:서울분당:이창호:01033338888:hello@nate.com"; String parse[] = data.split(":"); ContractInfo c = new ContractInfo(Integer.parseInt(parse[0]), parse[1], parse[2], parse[3], parse[4]); System.out.println(c); System.out.println(parse[2]);
해설
String parse[] = data.split(”:”) split 메소드 쪼개는 역할. “:” :을 기준으로 쪼갠다. >5개가 나옴 파싱이 제대로 됐다 : 그 언어의 오브젝트로 바뀌면 됐다 ContractInfo c = new ContractInfo(parse[0], parse[1], parse[2], parse[3], parse[4]); ContractInfo c = new ContractInfo(Integer.parseInt(parse[0]), parse[1], parse[2], parse[3], parse[4]); > parse.length하면 5가 나옴 > parse[2] 하면 이창호가 나옴 * System.out.println(c.getMoney()); > 이게 바로 파싱한 것
Share article