수업
+9 문자열 배열
hs_developer
2022. 5. 13. 17:51
p206
중요 라이브러리
1. 문자 개수
length(): init
String s = "Hello";
s.length() → 5
String s = "홍길동";
s.length() → 3
2. 문자 자르기
substring(int s): String
substring(int s, int e): String
"0123456789" → 문자열 0번부터 char[]
substring(5) → 56789
substring(2, 7) → 23456 (7 제외)
indexOf(String s): int (리턴형)
lastIndexOf(String s): int
String s = "Hello Java";
0123456789
s.indexOf("e") → 1
s.indexOf("a") → 7
3. 공백 제거
trim(): String
String s = " Hello Java "
s.trim() = "Hello Java" → 좌우 공백 제거
s.replace(" ", "") → 가운데 공백 제거
String s = "1234Hello한글Java123";
s.replaceAll("[^가-힣]", "") → 한글 제외하고 지운다
숫자: [0-9]
알파벳: [A-Za-z]
//예시
public static void main(String[] args) {
String s = "1234Hello한글Java123";
String res = s.replaceAll("[^가-힣]", "");
// res: 처리한 결과 값
System.out.println(res);
}
한글
4. 단어 별 구분해서 저장
split(String s): String[]
String s = "red, blue, green, black, pink"
String[] color = s.split(",")
color[0]="red" color[1]="blue"
// 예시
public static void main(String[] args) {
String s2="김가가,김나나,김다다,김라라,김바바";
String[] ss=s2.split(",");
for(String sss:ss)
{
System.out.println(sss);
}
}
김가가
김나나
김다다
김라라
김바바
5. 문자 변경
1.
replace(String s1, String s2): String
String s = "Hello Java";
s.replace("a", "b");
Hello Jbvb
2.
replaceAll(String s1, String s2): String
toUpperCase(): String → 대문자
String s = "hello"
s.toUpperCase() → HELLO
toLowerCase(): String → 소문자
String s = "HELLO"
s.toLowerCase() → hello
6. 모든 데이터형 → 문자열 변경
valueOf(기본형): String
valueOf(1) → "1"
valueOf(true) → "true"
7. 비교
if에서 주로 사용
equals(): boolean → 문자열 비교
contains(): boolean → 포함한 문자
startsWith(): boolean → 시작 문자열
endsWith(): boolean → 끝 문자열
예제
1. 문자열 검색
public static void main(String[] args) {
// contains : 포함 문자열
Scanner scan=new Scanner(System.in);
System.out.print("검색어 입력:");
String fd=scan.next();
try
{
for(int i=1;i<=40;i++)
{
// 저장 => 정적 (Jsoup) , 동적 ()
Document doc=Jsoup.connect("https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20220512&page="+i).get();
Elements title=doc.select("div.tit5 a");
for(int j=0;j<title.size();j++)
{
//if(title.get(j).text().contains(fd))
// => 검색
//if(title.get(j).text().startsWith(fd))
// => 자동완성기
//if(title.get(j).text().endsWith(fd))
if(title.get(j).text().equals(fd))
// 상세보기 , 수정 , 삭제
{
System.out.println((j+1)+"."+title.get(j).text());
}
}
}
}catch(Exception ex){}
2. 문자열 변경 + 개수 세기
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// toUpperCase: 대문자 변환
System.out.println("알파벳 문자열 입력: ");
String data = sc.next();
String data_change = data.toUpperCase(); // data_change → 값을 꼭 받아야 함
System.out.println(data_change);
// 'A'가 몇 개를 포함 하는지
int count = 0;
for(int i=0; i<data_change.length(); i++)
{
// 문자열을 1개씩 가지고 온다 → charAt(index)
char c = data_change.charAt(i);
if(c=='A')
count++;
}
System.out.println("A의 개수는 " + count);
알파벳 문자열 입력:
adfadfdfafadf
ADFADFDFAFADF
A의 개수는 4
문자열 변경(2)
문자열 → char[]
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("알파벳 입력: ");
String data = sc.next();
System.out.println("원본: " + data);
String data_change = data.toLowerCase();
System.out.println("변경: " + data_change);
// char[]로 변환
char[] arr = data_change.toCharArray();
// 방법1
for(char c:arr)
{
System.out.print(c + " ");
}
System.out.println();
// 방법2
System.out.print(Arrays.toString(arr));
}
}
문자열 변경(3) → replace / replaceAll
public static void main(String[] args) {
String data = "Hello String";
// letter 변경
String data_change = data.replace('l', 'k');
System.out.println("data = " + data);
System.out.println("data_change = " + data_change);
// 단어 변경
String data_change2 = data.replace("String", "Java");
System.out.println("data_change2 = " + data_change2);
System.out.println();
// 특수 문자 변경
String[] strData= {
"Hello 1234",
"Java? Data",
"한글 자바 $",
"12345 . data",
"1234Java한글",
"AAA|BBB",
"한글^Data",
};
for(String ss:strData)
{
String s = ss.replaceAll("[^가-힣A-Za-z]", ""); // 한글, 알파벳 제외하고 제거
System.out.println(s);
}
}
}
특수 문자
^ (startsWith): 시작
^[가-힣]: 한글로 시작한 문자열
^[a-z]: 소문자 시작
^[0-9]: 숫자 시작
[^가-힣]: 한글 제외
-
$ (endsWith): 끝
[A-Z]$: 끝나는 문자열 대문자
-
. : 임의의 문자
+ : ABC+ → ABC 다음에 1개 이상의 문자 포함
eg. 맛있는 맛있고 맛있게..
맛있+
*: ABC* → ABC 다음에 0개 이상의 문자 포함
|: 선택 (2개 중에 1개 선택)
\ : 문자 자체를 읽어옴
3. 문자열 길이 제거
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력: ");
String data = sc.next();
System.out.println("data: " + data);
System.out.println("문자 개수: " + data.length());
String s = "Hello"; // 문자 개수: 5
String s1 = " Hello "; // 문자 개수: 7
// 5로 변경
System.out.println(s1.trim().length());
}
}
문자열 배열_1
// split
[A, B, C, D, E, F, G, H]
// charAt() → 문자열 하나 하나씩 불러온다
A
B
C
D
E
F
G
H
// toCharArray()
[A, B, C, D, E, F, G, H]
// new String()
일월화수목금토
// String.valueOf()
일월화수목금토
public static void main(String[] args) {
String s = "ABCDEFGH";
//split()
String[] ss = s.split("");
System.out.println("ss = " + Arrays.toString(ss));
// charAt()
for(int i=0; i<s.length(); i++)
{
System.out.print(s.charAt(i) + " ");
}
System.out.println();
// toCharArray()
char[] c = s.toCharArray();
System.out.print("c=" + Arrays.toString(c));
System.out.println();
// 다른 방법
char[] cc= {'일', '월', '화', '수', '목', '금', '토'};
String sss=new String(cc);
System.out.println(sss);
String sss2=String.valueOf(cc);
System.out.println(sss2);
}
문자열 배열_응용
1. 서울 여행_자연
===== 메뉴 =====
1. 목록 출력
2. 상세 보기
3. 명칭 검색
4. 주소 검색
5. 종료
===============
메뉴 선택:4
구/동 입력:
강남
도산공원
06020 서울 강남구 도산대로45길 20 (도산전시관)
import java.util.Scanner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class 서울여행_자연 {
static String[] title=new String[120];
static String[] msg=new String[120];
static String[] address=new String[120];
static {
// 변수 초기화 => 자동 호출 => 초기화(초기화 블록)
try
{
//https://korean.visitseoul.net/nature?curPage=15
// <a>
int k=0;
for(int i=1;i<=15;i++) // 15페이지
{
Document doc=Jsoup.connect("https://korean.visitseoul.net/nature?curPage="+i).get();
Elements link=doc.select("ul.article-list li.Item a");
// class => 없으면 위에 태그 (class,id) => class => 태그.클래스명
for(int j=0;j<link.size();j++)
{
String temp="https://korean.visitseoul.net"+link.get(j).attr("href");
System.out.println(link.get(j).attr("href"));
Document doc2=Jsoup.connect(temp).get();
Element title1=doc2.selectFirst("h3.h3");
Element msg1=doc2.selectFirst("div.text-area");
Element address1=doc2.selectFirst("div.detail-map-wrap div.detail-map-infor dl dd");
title[k]=title1.text();
msg[k]=msg1.text();
address[k]=address1.text();
k++;
}
}
}catch(Exception ex){}
}
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
// 메뉴
while(true)
{
System.out.println("===== 메뉴 =====");
System.out.println("1. 목록 출력");
System.out.println("2. 상세 보기");
System.out.println("3. 명칭 검색");
System.out.println("4. 주소 검색");
System.out.println("5. 종료");
System.out.println("===============");
System.out.print("메뉴 선택:");
int menu=scan.nextInt();
if(menu==5)
{
System.out.println("프로그램 종료");
break;
}
else if(menu==1)
{
System.out.println("===== 서울 자연 & 관광 =====");
for(int i=0; i<title.length; i++)
{
if(title[i]!=null) // 목록에서 null인 값 제외하고 출력
{
System.out.println((i+1)+"."+title[i]);
}
}
}
else if(menu==2)
{
System.out.print("상세 보기 번호 입력(1-93): ");
int detail = scan.nextInt();
System.out.println("장소: " + title[detail]);
System.out.println("소개: " + msg[detail]);
System.out.println("위치: " + address[detail]);
}
else if(menu==3)
{
System.out.print("방문지 입력: ");
String loc=scan.next();
for(String s:title)
{
if(s!=null)
{
if(s.contains(loc))
{
System.out.println("★" + s);
}
}
}
}
else if(menu==4)
{
System.out.println("구/동 입력: ");
String gu=scan.next();
try // try-catch: 오류 없애기
{
for(int i=0; i<94; i++)
{
if(address[i].contains(gu)) // 주소를 입력해서
{
System.out.println(title[i]); // 그 주소의 title
System.out.println(address[i]); // address 가져온다
System.out.println("-------------------------------");
}
}
} catch(Exception ex) {}
}
else
{
System.out.println("없는 메뉴입니다!!");
}
}
}
}
2. 숫자 야구 게임
코드 수정 필요
public static void main(String[] args) {
// 1. 변수 설정
int[] com = new int[3]; // 난수
int[] user = new int[3]; // 사용자 입력 값
// 2. 변수 난수 발생 → 중복X
int su=0; // 난수 저장하는 변수
boolean bCheck=false; // 중복 여부 확인
for(int i=0; i<3; i++)
{
// 중복 체크
// bCheck=true → 다시 난수 발생
// bCheck=false → com에 저장
bCheck=true;
while(bCheck)
{
// 난수 발생
su=(int)(Math.random()*9)+1; // 1-9
bCheck=false;
// 비교 → 저장된 숫자 중복 여부
for(int j=0; j<i; j++)
{
if(su==com[j])
{
bCheck=true; // while문 수행
break;
}
}
}
com[i]=su;
}
System.out.println("com=" + Arrays.toString(com));
// ----- 반복문 → while
// 3. 사용자 입력
// 3-1. 정상 입력 여부 확인 → continue; → if
// 4. 난수 비교
// 5. 힌트 제공
// 6. 종료 여부 → break
// -----
Scanner sc=new Scanner(System.in);
while(true)
{
System.out.print("세 자리 정수 입력: ");
int input=sc.nextInt();
// 오류 → 잘못된 입력일 때
if(input<100 || input>999) // input>=100 && input <= 999
{
System.out.println("잘못된 입력입니다!!");
continue; // while 조건식으로 이동
}
user[0]=input/100;
user[1]=(input%100)/10;
user[2]=input%10;
// break; // 정상적인 입력시 빠져 나감
// 같은 수 입력하면 안 됨
if(user[0]==user[1] || user[0]==user[2] || user[1]==user[2])
{
System.out.println("같은 수는 입력할 수 없습니다.");
continue;
}
// 오류 처리 → 0 포함하면 안 됨
if(user[0]==0 || user[1]==0 || user[2]==0)
{
System.out.println("\"0\"은 사용할 수 없습니다.");
continue;
}
// 비교
int s=0, b=0;
for(int i=0; i<3; i++) //com
{
for(int j=0; j<3; j++) //user
{
if(com[i]==user[j]) // 3개 다 구분 중
{
if(i==j)
s++;
else
b++;
}
}
}
// 힌트
System.out.printf("Input Number:%d, Result:%dS-%dB\n", input,s,b);
// 종료 여부
if(s==3)
{
System.out.println("Game Over");
break;
}
}
System.out.println("user=" + Arrays.toString(user));
}