문자열에서 문자 갯수 세기 Method
import java.util.Scanner;
/*
 메쏘드
 반환형 countChar(매개변수부){
 }

 매개변수부 : 메소드호출부에서 받아오는 인자값(인수값)
 반환형 : 반환(return)할 것의 자료형
 */


//countA 메소드(함수)
//문자열(String)을 받아서 A의 갯수(int)를 세서 return해줌.
public class Quiz_05 {
	public static int countA(String a) {
		int count=0;
		char[] words = a.toCharArray(); //매개변수인 String형 변수 a에 들어있는 문자열을 Char형 배열참조변수 words에 한 인덱스당 한글자씩 저장한 배열을 만든다
		for(int i=0;i<words.length;i++) { //배열의 인덱스에 들어있는 값들을 for문을 이용하여 하나하나 확인이 가능하다 
			if(words[i]=='A' || words[i]=='a') {  //배열의 값이 A나 a와 일치하는지 확인
				count++; //일치하면 count를 증가시킨다.
			}
		}
		return count; //for문이 끝난 후 최종적으로 알파벳 A의 count갯수를 return한다
	}
	public static int countALPABET(String a,String b) {
		int count=0; 
		char[] words = a.toCharArray(); //매개변수 String형 변수 a에 들어있는 문자열을 Char형 배열참조변수 words에 한 인덱스당 한글자씩 저장한 배열을 만든다
		char alphabet=b.charAt(0); //char형 변수 alphbet에 매개변수 String형변수 b의 0번째 글자를 character값으로 가져온것을 저장한다


		for(int i=0;i<words.length;i++) { //배열의 인덱스에 들어있는 값들을 for문을 이용하여 하나하나 확인이 가능하다 
			if(words[i]==alphabet || words[i]==(alphabet+32) || words[i]==(alphabet-32)) {
				//배열의 값이 char형변수 alphabet에 저장된 값과 같은지 확인. 대소문자 구별없이 카운트하고 싶어서 or연산으로 alphabet과 같거나/alphabet에 +32 하거나 -32 한 아스키코드와 같은지 확인 
				count++; //일치하면 count를 증가시킨다.
			}
		}
		return count; //for 문이 끝난 후 최종적으로 입력받은 알파벳의 count갯수를 return한다.
	}

	//교수답안
	public static int countChar(String target, char ch) {
		int count=0;
		for(int i=0;i<target.length();i++) {
			if(target.charAt(i)==ch) {
				count++;
			}
		}
		return count;
	}


	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("A 외에 어떤 알파벳의 갯수를 세갰습니까?");
		String alphabat=sc.nextLine();
		System.out.println("A와 "+alphabat+"의 갯수를 셀 문자열을 입력하세요 > ");
		String str=sc.nextLine();
		System.out.println("");
		System.out.println(alphabat+"의 갯수 = " + countALPABET(str,alphabat));
		System.out.println("A 의 갯수 = " + countA(str));
		System.out.println(countChar("ASDFWEGGAGS",'G'));

		/*
		 * 
		 * Why? println까지 메쏘드에 넣으면 되는데 굳이 return으로 수만 받는가?
		 * 재사용성 때문에~~~~~~~~~~~~~~~~~~
		 * 메쏘드에서 구한 값을 현재의 println뿐만 아니라 다른 곳에 보내야/사용해야할 경우가
		 * 앞으로 많아지기 때문에, 사용할 용도가 다양해졌을때 결과값(return)을 받아 
		 * 개발자가 그 return값을 어떻게 사용할지 정해서 코드를 쓰는게 더 효율적 
		 * """""최대한 범용성 있게"""""
		 * 메쏘드의 이름과 딱 맞는 행동만 정해주는게 좋음=행동에 맞는 메쏘드 이름을 정해주는게 좋다.
		 * 
		 */
	}

}