package com.test.java;
import java.util.Scanner;
public class Ex29_String {
public static void main(String[] args) {
/*
문자열, String
- String 클래스에서 문자열 조작에 관련된 기능 제공
*/
// m1();
// m2();
// m3();
// m4();
// m5();
// m6();
// m7();
// m8();
// m9();
// m10();
// m11();
// m12();
// m13();
// m14();
m15();
}// main
private static void m15() {
// 문자열 분리
// - String[] split(String delimiter)
String txt = "홍길동|아무개|하하하|호호호|후후후"; // 자르고 나서 저장해야 하므로 return 값이 배열임
// 정규표현식
String[] list = txt.split("\\|"); // 구분자는 사라짐, 단 . 과 | 은 그대로 쓰면 안됨 \\을 써야함
for (int i=0; i<list.length; i++) {
System.out.println("이름: " + list[i]);
}
}
private static void m14() {
// 문자열 치환(바꾸기)
// - String replace(char old, char new)
// - String replace(String old, String new)
String txt = "안녕하세요. 홍길동입니다";
System.out.println(txt.replace("홍길동", "아무개"));
String content = "게시판 글을 씁니다. 바보야!!";
String word = "바보";
// masking
System.out.println(content.replace(word, "**"));
System.out.println();
txt = " 하나 둘 셋 ";
System.out.println(txt.trim()); // 가운데 공백을 안없애는 이유? 사용자가 인식 가능
System.out.println(txt.replace(" ", "")); // 다 없애고 싶을때
System.out.println(txt.replace("하나", "")); // 글자 없애고 싶을때도
}
private static void m13() {
// 문자열 검색
// - indexOf
// - lastIndexOf
// - boolean contains(String s)
String txt = "안녕하세요. 홍길동입니다.";
if (txt.indexOf("홍길동") > -1) {
System.out.println("O");
}
if (txt.contains("홍길동")) {
System.out.println("O");
} // 있다 없다 단순한 작업할때
}
private static void m12() {
// 문자열 추출
// - String substring(int beginIndex, int endIndex)
// - String substring(int beginIndex)
// - beginIndex: 포함(inclusive)
// - endIndex: 미포함(exclusive)
String txt = "가나다라마바사아자차카타파하";
System.out.println(txt.substring(3,7)); // 3~6(7-1) 까지 라, 마, 바, 사
System.out.println(txt.substring(3)); // 시작 위치만 지정하였으므로 끝까지
System.out.println(txt.charAt(4)); // char > 문자코드값
System.out.println(txt.substring(4, 5)); // String
System.out.println();
String jumin = "970410-2098765";
// 성별?
System.out.println(jumin.charAt(7) == '1' ? "남자" : "여자");
System.out.println(jumin.substring(7,8).equals("1") ? "남자" : "여자");
// 몇년생?
System.out.println("" + jumin.charAt(0) + jumin.charAt(1)); // 그냥 하면 숫자라서..
System.out.println(jumin.substring(0,2));
// 몇월생?
System.out.println(jumin.substring(2,4));
// 몇일생?
System.out.println(jumin.substring(4,6));
System.out.println();
//파일 경로
String path = "C:\\class\\code\\java\\Hello.java";
// 1. 파일명 추출 > Hello.java
int index = path.lastIndexOf("\\"); // \\ > 1글자
String filename = path.substring(index + 1);
System.out.println("파일명: " + filename);
// 2. 파일명 > 확장자 없는 파일명 추출 > Hello
index = filename.lastIndexOf(".");
String filenameWithoutExtension = filename.substring(0, index);
System.out.println("순수 파일명: " + filenameWithoutExtension);
// 3. 확장자만 추출 > .java
String extension = filename.substring(index);
System.out.println("확장자: " + extension);
}
private static void m11() {
// 문자열 검색 (******) 사용빈도수 높음
// - 문자열내에서 원하는 문자(열)을 검색 > 발견된 위치(index) 반환
// - int indexOf(char c)
// - int indexOf(String s)
// - int indexOf(char c, int beginIndex) // 찾기 시작할 위치 지정 가능
// - int indexOf(String s, int beginIndex)
// - int lastindexOf(char c)
// - int lastindexOf(String s)
// - int lastindexOf(char c, int beginIndex)
// - int lastindexOf(String s, int beginIndex)
String txt = "홍길동 자바 아무개 자바 테스트";
System.out.println(txt.indexOf("자바")); // 4
System.out.println(txt.indexOf("자바", 6)); // 두번째 자바 찾기
System.out.println(txt.lastIndexOf("자바")); // 오른쪽에서 왼쪽으로 검색함
System.out.println(txt.lastIndexOf("자바", 10));
}
private static void m10() {
// 패턴 검색
// - boolean startsWith(String word)
// - boolean endsWith(String word)
String name = "홍길동";
// 이 사람이 '홍'씨? > boolean
System.out.println(name.charAt(0) == '홍');
System.out.println(name.indexOf('홍') == 0);
System.out.println(name.startsWith("홍")); // 앞글자가 '홍'으로 시작하는지?
System.out.println();
// '동'으로 끝나는지?
System.out.println(name.charAt(name.length() -1) == '동');
System.out.println(name.indexOf('동') == name.length() - 1);
System.out.println(name.endsWith("동"));
// 자원 경로
String path = "C:\\class\\code\\java\\Hello.java";
// 위의 자원이 자바 소스 파일인가? 확장자 검사!!
if (path.endsWith(".java")) {
System.out.println("O");
} else {
System.out.println("X");
}
}
private static void m9() {
// 문자열 대소문자 변경
// - String toUpperCase() 대문자로 바꿔줌
// - String toLowerCase(); 소문자로 바꿔줌
// 검색할 때 많이 사용
String content = "오늘 수업하는 과목은 Java입니다.";
String word = "java"; // 검색어
System.out.println(content.toUpperCase());
// System.out.println(content.toLowerCase());
System.out.println(word.toUpperCase()); // 대소문자에 의한 검색 차이가 없게 만듦
// 대소문자 구분 (Case sensitive)
// - 정확도 높음
// - 검색율 낮음
if (content.indexOf(word) > -1) {
System.out.println("검색 결과 O");
} else {
System.out.println("검색 결과 X");
}
// 메서드 체이닝
// 메서드().메서드().메서드()
// 대소문 구분 X (Case insensitive)
// - 검색율 높음
// - 정확도
if (content.toUpperCase().indexOf(word.toUpperCase()) > -1) {
System.out.println("검색 결과 O");
} else {
System.out.println("검색 결과 X");
}
}
private static void m8() {
// 게시판 글쓰기 > 금지어 !!
String stop = "바보"; // 금지어
String content = "안녕하세요. ㅂㅏㅂㅗ 저는 자바를 배우는 학생입니다.";
// 못찾으면 -1 이니깐
if (content.indexOf(stop) > -1) {
System.out.println("금지어 금지!!");
} else {
System.out.println("글쓰기 처리~");
}
// 금지어 배열 만들기
String[] stops = {"바보", "멍청이", "메롱", "ㅂㅏㅂㅗ"};
for (int i=0; i<stops.length; i++) {
if (content.indexOf(stops[i]) > -1) {
System.out.println("금지어 발견!!");
break; //
}
}
System.out.println("종료");
}
private static void m7() {
// 문자열 검색 (******) 사용빈도수 높음
// - 문자열내에서 원하는 문자(열)을 검색 > 발견된 위치(index) 반환
// - int indexOf(char c)
// - int indexOf(String s)
// - int indexOf(char c, int beginIndex) // 찾기 시작할 위치 지정 가능
// - int indexOf(String s, int beginIndex)
String txt = "안녕하세요. 홍길동입니다.";
int index = -1;
index = txt.indexOf('하'); //
System.out.println(index); // 발견된 위치를 알려줌 2
index = txt.indexOf('홍');
System.out.println(index);
index = txt.indexOf('강');
System.out.println(index); // 돌려줄 값이 없어서 index로 사용하지 않을 것 같은 값을 돌려주었다.
index = txt.indexOf("홍길동");
System.out.println(index); // 첫번째 글자 리턴
txt = "안녕하세요. 홍길동입니다. 반갑습니다. 홍길동입니다. 안녕히가세요. 홍길동입니다";
index = txt.indexOf("홍길동");
System.out.println(index); // 첫번째 찾음, 검색의 시작 위치: 처음
index = txt.indexOf("홍길동", index + 3); // 시작 위치 10
System.out.println(index); // 두번째 찾음
index = txt.indexOf("홍길동", 25); // 전에 찾은 index 위치 + 홍길동 글자수 3
System.out.println(index); // 세번째
}
private static void m6() {
// 문자열 공백 제거
// - String trim()
// - 문자열에 존재하는 공백(whitespace > 스페이스, 탭, 개행)을 제거하는 메서드
// - 문자열의 시작과 끝에 존재하는 공백 문자를 제거한다.
// - 불필요하거나 or 사용자 실수로 생긴 공백 제거 역할 (검색엔진)
String txt = " 하나 둘 셋 ";
System.out.printf("[%s]", txt);
System.out.printf("[%s]", txt.trim()); // [하나 둘 셋]
System.out.println("자바".equals("자바"));
System.out.println(" 자바 ".trim().equals("자바"));
}
private static void m5() {
Scanner scan = new Scanner(System.in);
System.out.print("단어: ");
String word = scan.nextLine();
if (isVaild(word)) { // 메서드 만듦
System.out.println("소문자 O");
} else {
System.out.println("소문자 X");
}
}
private static boolean isVaild(String word) {
for (int i=0; i<word.length(); i++) {
char c = word.charAt(i);
if (c < 'a' || c > 'z') {
return false; // if ((c < 'a' || c > 'z') && (c < '0' || c > '9')
}
}
return true;
}
private static void m4() {
// 단어 입력
// - 영어 소문자로만
Scanner scan = new Scanner(System.in);
System.out.print("단어: ");
String word = scan.nextLine(); // 한글자씩 문자코드 비교
// System.out.println(word.charAt(0));
// System.out.println(word.charAt(1));
// System.out.println(word.charAt(2));
boolean result = true;
for (int i=0; i<word.length(); i++) {
char c = word.charAt(i);
// if (c >= 'a' && c <= 'z') {
// System.out.println("소문자 O");
// } else {
// System.out.println("소문자 X");
// }
// *** 유효성 검사는 잘못된 것을 찾는 조건을 만든다.
if (c < 'a' || c > 'z') {
System.out.println("소문자 X");
result = false;
break; // for문을 빠져나감
}
}// for
System.out.println(result);
if (result) {
System.out.println("소문자O");
} else {
System.out.println("소문자X");
}
}
private static void m3() {
// 주민등록번호 입력
// ex) 970110-1234567
Scanner scan = new Scanner(System.in);
System.out.print("주민번호 입력('-'필수): ");
String jumin = scan.nextLine();
if (jumin.charAt(6) == '-') {
System.out.println("올바른 주민번호");
} else {
System.out.println("잘못된 주민번호");
}
}
private static void m2() {
// 문자열 추출
// - char charAt(int index)
// - 원하는 위치의 문자를 추출하는 메서드
// - Zero-based Index 0부터 시작
String txt = "안녕하세요. 홍길동입니다.";
char c = txt.charAt(4); // 요
System.out.println(c);
c = txt.charAt(10);
System.out.println(c);
// StringIndexOutOfBoundsException
// c = txt.charAt(15);
// System.out.println(c);
// 마지막 문자
c = txt.charAt(txt.length() - 1);
System.out.println(c);
}
private static void m1() {
// 문자열 생성
// 1. 리터럴
// 2. 객체 생성
String str = "홍길동";
String str2 = new String("홍길동"); // 정석
// 사용에는 차이가 없지만 내부적 구조의 차이가 있다
// 문자열 == 문자의 집합
// String == char[]
// 문자열 길이
// - int length()
String txt = "홍길동";
System.out.println(txt.length()); // 문자수
System.out.println("자바".length()); // 상수에 붙여도 됨
System.out.println("ABC한글123!@#".length()); // 모든 글자를 동등한 글자수로
// 요구사항] 사용자 입력 > 문자수?
Scanner scan = new Scanner(System.in);
System.out.print("문장 입력: ");
String statement = scan.nextLine();
System.out.printf("%s > %d문자\n", statement, statement.length());
//유효성 검사
// - 이름 입력
// - 2자 ~ 5자
System.out.print("이름: ");
String name = scan.nextLine();
if (name.length() >= 2 && name.length() <= 5) {
System.out.println("올바른 이름");
} else {
System.out.println("이름을 2~5자 이내로 입력하세요.");
}
}
}