Problem Solving/Algorithm Concepts

[Java Algorithm] 1-1 문자 찾기(자바 한 문자만 입력 받기, 대소문자 변환)

대범하게 2021. 8. 14. 20:34
반응형

* 문제 설명

한 개의 문자열을 입력받고, 특정 문자를 입력받은 후

해당 특정문자가 대소문자에 관계없이 문자열에 몇 개 존재하는지 알아내어 출력해주는 문제

 

* 소스코드

package algorithm;

import java.util.Scanner;

public class Main {
	public int solution(String str, char t) { 
		int answer = 0;
		str = str.toUpperCase(); //string이 대문자로 된다.!
		t = Character.toUpperCase(t); // t는 문자이기 때문에 Character라는 클래스에서 클래스에 있는 메서드 사용한다.
        
        for(int i = 0; i < str.length(); i++) {
			if(str.charAt(i) == t)
				answer++;
		}
		
		/*for(char x : str.toCharArray()) { //문자배열 생성됨
			if(x == t)
				answer++;
		}*/
		
		return answer;
	}
	
	public static void main(String[] args){ 
		Main T = new Main(); //static에서 인스턴스 메서드를 호출하려면 클래스 객체를 생성해야함.
		Scanner kb = new Scanner(System.in);
		String str = kb.next();  // kb.next()를 함으로써 "문자열"을 읽어들임
		char c = kb.next().charAt(0); //문자열에서 문자 하나만 가져와야하니!
		System.out.println(T.solution(str, c));
        kb.close(); //스캐너는 항상 이렇게 열고 닫아 주기!!

  }
}

// before생각: input1을 배열에 넣고 한 단어씩 비교해가면서 몇 갠지 세기!

 

*정리된 소스코드

* 주의

char ch = kb.next(); 

 

이렇게 ch를 받을 수가 없다!

next(), nextLine()은 문자열 String 값을 받는 함수이기 때문에 쓸 수가 없다. 

 

char ch = kb.next().charAt(0);

.charAt()은 문자열에서 문자를 뽑는 함수로 이를 사용한다.

 

String str = kb.next(); // kb.next()를 함으로써 "문자열"을 읽어들임
char ch = kb.next().charAt(0);  //kb.next()를 함으로써 "문자열"을 읽어들이고 String을 인덱스로 접근함

 

* 추가공부

다른 방식으로 푼 사람의 코드이다. 

특정문자를 애초에 제한하지 않고 String으로 받아들이게 한다.

 

for문에서 문자열 inputWord의 길이를 제한으로 두고 비교해나간다.

 

for (int i = 0; i < inputWord.length(); i++) {
  if (String.valueOf(inputWord.charAt(i)).equalsIgnoreCase(inputOneCharacter)) {
    equalsCount++;
  }
}

 

** valueOf() 메서드는 ()괄호 안의 해당 객체를 String 객체로 변환시키는 역할을 한다. 즉, String의 객체로 형변환한다.

 

** equalsIgnoreCase() 메서드는 대소문자 구분없이 문자열 자체만을 비교하는 역할을 한다.

 

자바에서 문자열을 비교하는 함수 equalsIgnoreCase(), equals()

 

특징)

equalsIgnoreCase(): 대소문자 구분 안 함.

equals: 대소문자 구분함.

 

문자열이 같은 경우 true 리턴

문자열이 다른 경우 false 리턴

 

문법) 

equalsIgnoreCase(문자열)

 

** toUpperCase(): 문자열을 대문자로 변경

 

** toLowerCase(): 문자열을 소문자로 변경

 

import java.util.Scanner;

public class Algorithm {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String inputWord = sc.next();
		String inputOneCharacter = sc.next();
		int equalsCount = 0;

		for (int i = 0; i < inputWord.length(); i++) {
			if (String.valueOf(inputWord.charAt(i)).equalsIgnoreCase(inputOneCharacter)) {
				equalsCount++;
			}
		}

		System.out.println(equalsCount);
	}
}

위 소스코드 출처: https://updown90.tistory.com/30?category=862703


07/20 복습

// 한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지
// 대소문자 구분 x
// 첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어짐.
// 첫 줄에 해당 문자 개수 출력
import java.util.Scanner;

public class Practice_01 {
	public int solution(String str, char ch) {
		int answer = 0;
		str = str.toUpperCase();
		//내가 짠 코드
		//ch = ch.charAt(0).toUpperCase();
		
		ch=Character.toUpperCase(ch); //문자니깐 Character라는 클래스에 있는 메소드 사용
		for(int i=0; i<str.length(); i++) {
			if(str.charAt(i)==ch) answer++;
		}
		return answer;
	}
	
	public static void main(String[] args) {
		Practice_01 T = new Practice_01(); //객체 생성
		Scanner kb = new Scanner(System.in);
		String str = kb.next();
		char ch = kb.next().charAt(0); // 한 문자 받기
		System.err.println(T.solution(str, ch));
	}
}