조건문까지 진도가 빠르다고 느꼈는데 객체지향은 진도가 더 빨랐....
객체지향 실습전에 밀린 문자열 실습과제 정리하면서 리뷰를 남겨 놓아야 할 것 같아서 정리중이다.
어차피 배운 배열이랑 조건문 반복문도 쓰고 배웠던거 내맘대로 실습과제에 모두 반영해 보는중ㅠ
실습문제 1.
- Sally의 그룹 채팅방
- 카카오톡 그룹 채팅방은 모두가 메시지를 볼 수 있습니다. 개인적으로 질문하고 싶은 Sally는 다른 사람들이 한번에 메시지를 확인할 수 없도록 일정 규칙 을 만들려고 합니다.
- 입력받은 한 문장에서 각 단어의 첫 글자는 소문자로 작성하고 나머지 글자는 대문자로 작성할 수 있도록 작성합니다.
메시지 입력: Hello Sally
hELLO sALLY
import java.util.Scanner;
public class Practice01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("메시지 입력 : ");
String str = sc.nextLine();
String[] words = str.split(" ") ; // 구분자를 기준으로 문자열을 잘라 배열로 입력 split(구분자,int limit 자룰 수 지정)
String answer = "";
for (int i =0; i < words.length; i++){
String first = words[i].substring(0,1); // substring 문자열의 특정 부분을 잘라냄, substring(int startIndex, int endIndex불포함)
String remain = words[i].substring(1); // word[1]부터 끝까지 잘라냄
first = first.toLowerCase(); // 단어 첫글자를 대문자를 소문자로
remain = remain.toUpperCase(); // 단어 첫글자를 제외한 나머지 글자를 소문자를 대문자로
String result = first+remain; // 단어 첫글자와 나머지 글자값 합치기
answer += " "+ result; // 단어 결과값을 저장해놓기 위해 answer에 별도로 저장
}
answer = answer.trim(); //trim 문자열의 앞뒤 공백 제거 후 복사본을 리턴
System.out.print(answer);
}
} // 카톡 채팅방처럼 이전에 입력한 문자열 값도 저장해서 남기도록 한다.
※ 1번 과제 point
split (구분자); → 구분자를 기준으로 자른다.
substring(int startIndex, int endIndex불포함); → 문자열의 특정 부분을 잘라냄
toLowerCase(); → 대문자를 소문자로 변환
toUpperCase(); → 소문자를 대문자로 변환
trim(); →문자열의 앞뒤 공백 제거 후 복사본을 리턴
실습문제 2.
import java.util.Scanner;
import java.util.Arrays;
import java.util.Scanner;
public class Practice02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt(); //테스트개수
for (int i=0; i < t; i++){
int r = sc.nextInt(); // 반복횟수(입력받을 문자열)
String s = sc.next(); // 입력받을 문자열
for (int j=0; j < s.length(); j++){ // 입력받을 문자열을 문자열길이만큼 반복 지정
for (int k=0; k < r; k++) { // 입력받은 문자열의 글자를 반복횟수만큼 반복 지정
System.out.print(s.charAt(j));//charAt은 String으로 저장된 문자열 중에서 한 글자만 선택해서 char타입으로 변환
}
}
System.out.println();
}
}
}
※ 2번 과제 point
for문 중첩 → 각 조건마다 단계별로 실행해보면서 수정하기
실습문제 3.
import java.util.Scanner;
import java.util.StringTokenizer;
public class Practice03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
StringTokenizer st = new StringTokenizer(str," ");
System.out.println(st.countTokens());
}
}
// StringTokenizer 클래스 : 문자열을 구분자를 이용하여 분리할 때 사용
//StringTokenizer st = new StringTokenizer(문자열 , 구분자 , true/false); true 구분자도 문자열에 포함 false는 구분하기만하고 미포함
//StringTokenizer 는 클래스 결과값이 문자열, split은 메소드 결과값이 문자열 배열
//.countTokens() 는 토큰의 개수를 반환
//trim은 문자열의 앞뒤 공백만 제거 후 복사본을 리턴, 문자열에 공백만 입력한 경우 공백제거 불가하므로 StringTokenizer을 사용한다.
※ 3번 과제 point
StringTokenizer 클래스 : 문자열을 구분자를 이용하여 분리할 때 사용
StringTokenizer st = new StringTokenizer(문자열 , 구분자 , true/false); true 구분자도 문자열에 포함 false는 구분하기만하고 미포함
countTokens() 는 토큰의 개수를 반환
String Tokenizer과 split의 차이점
StringTokenizer 는 클래스 결과값이 문자열, split은 메소드 결과값이 문자열 배열
처음에 문제를 trim으로 풀었는데 오답이라고 나와서 확인해 보니 trim은 문자열의 앞뒤 공백만 제거 후 복사본을 리턴, 문자열에 공백만 입력한 경우 공백제거 불가하므로 StringTokenizer을 사용한다.
실습문제 4.
import java.util.Scanner;
public class Practice04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
a = (a % 10)*100 + ((a % 100)/10)*10 + (a / 100); // a의 10으로나눈 나머지값->1의자리수, 100으로나눈나머지값/10->10의자리수, 100나눈몫->100의자릿수
b = (b % 10)*100 + ((b % 100)/10)*10 + (b / 100);
System.out.println(a>b? a : b); // a>b true이면 a, false이면 b 출력
}
}
※ 4번 과제 point
숫자 거꾸로 출력하기
세자리수 기준 ex) 734
1의자리수 : 10으로 나눈 나머지값 ex) 734%10 = 4
10의자리수 : 100으로 나눈나머지값을 다시 10으로 나눈값 ex) 734%100/10 = 3
100의자리수 : 100으로 나눈 몫 ex) 734/100=7
각 숫자별 해당자리수 구하는걸 평소에 생각해본적이 없어서 헤맸...... 오랜만의 산수 느낌이랄까
실습문제 5.
코딩테스트 연습 - 문자열 내 p와 y의 개수 | 프로그래머스 스쿨 (programmers.co.kr)
class Solution {
boolean solution(String str) {
int p = 0;
int y = 0;
for (int i=0; i < str.toLowerCase().length(); i++){ //주어진 문자열을 모두 소문자로 변환
if (str.charAt(i) == 'p') { // 문자열의 글자가 p와 같다면 p값 증가
p ++;
} else if (str.charAt(i) == 'y') { // 문자열의 글자가 y와 같다면 y값 증가
y ++;
}
}
return p == y; // p와 y개수가 같으면 true 다르면 false
} // return문은 실행중인 메서드를 종료하고 호출한 메서드로 돌아간다.
}
※ 5번 과제 point
return이 뭔가 했더니 뒤에 배운 객체지향 배우면서 알게 되었다.
return문 : 현재 실행중인 메서드를 종료하고 호출한 메서드로 되돌아감
str.charAt(); → 문자열에서 문자만 추출할 때 사용
실습문제 6.
코딩테스트 연습 - 핸드폰 번호 가리기 | 프로그래머스 스쿨 (programmers.co.kr)
class Solution06 {
public String solution(String phone_number) {
String answer = "";
for (int i =0; i < phone_number.length(); i++) { // 주어진 문자열 길이만큼 반복
if (i < phone_number.length()-4){ // 뒤에서 4번째 자리 전까지
answer += "*"; // 변수 answer에 *값
} else {
answer += phone_number.charAt(i); // 뒷 4자리는 주어진 문자열의 문자 하나씩 넣어주기
}
}
return answer;
}
}
※ 6번 과제 point
반복문 안에 조건문 넣기
실습문제 7.
public class Practice07 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String match = "[^a-zA-Z]"; // 영문자만 남기는 조건식
str = str.replaceAll(match, "").toLowerCase(); // 문자열에서 영문자만 남기고 소문자로 변환
String reverse =""; // 거꾸로 출력해서 저장할 문자열
for (int i = str.length()-1; i >= 0; i--) {
reverse += str.charAt(i); //문자열 거꾸로 출력 반복문
}
if (str.equals(reverse)){
System.out.println("true"); // 입력문자열과 거꾸로 출력한 문자열 일치여부
} else {
System.out.println("false");
}
}
}
※ 7번 과제 point
사실 7번 과제는 내 방식대로 풀어서 맞는건지 모르겠다.
replaceall(정규식or바꿀문자, 대체문자) → 문자열에서 특정 문자를 다른문자로 문자열 전체 변환할 때 사용
이렇게 실습과제는 밀려만 가고............
복습은 언제하고 예습은 언제 한단 말입니까 ㅠㅠㅠㅠㅠ
'[패스트캠퍼스]KDT 핀테크 서비스 백엔드 > review' 카테고리의 다른 글
8~10주차 Review - Spring - 2022. 11. 18. 16:31 작성 (0) | 2022.12.19 |
---|---|
OOP 실습 review - 2022. 10. 12. 21:15 작성글 (0) | 2022.12.19 |
4주차 실습과제(배열) review - 2022. 10. 6. 13:56 작성글 (0) | 2022.12.08 |
2주차 Review - java(1) - 2022. 9. 23. 14:36 작성글 (1) | 2022.12.08 |
1주차 Review - git/github - 2022. 9. 16. 14:01 작성글 (0) | 2022.12.08 |