조건문 오류 & 배열안의 원소 개수를 구하는 방법

조회수 513회
public class Testtest{

  public static void main(String[] args){
    String einString = Terminal.askString("String: ");
    String[] array_word = einString.split("");
    char[] arrayChar = einString.toCharArray();
    char[] count = new char[arrayChar.length];

    **for(int i=0; i<array_word.length; i++){
      if((byte)arrayChar[i]>64&&(byte)arrayChar[i]<91){
        count[i] = arrayChar[i];
        if((byte)arrayChar[i]>96&&(byte)arrayChar[i]<123){
          for(int j=0; j<count.length-1; j++){
            count[j] = count[j+1];
          }
          break;
        }
      }
    }**
    **for(int i=0; i<array_word.length; i++){
      if((byte)arrayChar[i]>96&&(byte)arrayChar[i]<123){
        for(int j=0; j<count.length-1; j++){
          count[j] = count[j+1];
        }
        break;
      }
      if((byte)arrayChar[i]>64&&(byte)arrayChar[i]<91){
        count[i] = arrayChar[i];
      }
    }**
    System.out.println(count);
    int b = count.length;
    System.out.println(b);
  }
}

예를 들어, String을 ABCDefgHIJklmnOPQRstuWXYz 입력했을때 대문자인 알파벳 개수만 뽑아내고 싶습니다. 근데 지금 **한 for 조건문 안의 부분을 위아래 if의 순서만 바꿔서 코드를 짰습니다. 그랬더니 앞에 한 글자가 자꾸 잘려서 결과가 출력됩니다. ABCDefgHIJklmnOPQRstuWXYz 를 넣으면 BCDHIJOPQRWXY 가 나오고 BCDefgHIJklmnOPQRstuWXYz 를 넣으면 CDHIJOPQRWXY 나오는 식으로 말입니다.

그리고 맨 마지막 줄에 알파벳 개수를 구하기 위해서 count.length를 썼는데 대문자 개수가 아닌 입력한 알파벳 개수가 전부 출력됩니다. 어디서부터 잘못된건지를 모르겠네요. 단순한것 같은데 코드를 너무 복잡하게 만들어놓은 것 같은 기분도 듭니다만, 제 능력의 한계라서ㅠ 조언과 수정 좀 꼭 부탁드립니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 자바8 부터 streams 가 추가 되었습니다.

    또한 Character 클래스에 isUpperCase 메소드가 있어서 그것을 사용하면 코드를 간결하게 작성할 수 있습니다.

    jshell> String s = "ABCDefgHIJklmnOPQRstuWXYz"
    s ==> "ABCDefgHIJklmnOPQRstuWXYz"
    
    jshell> List<Character> chars = s.chars()    // 문자열을 각 문자로 나눠 intstream 으로 표현합니다.
        .filter(c -> Character.isUpperCase(c))    // 대문자만 골라냅니다.
        .mapToObj(c -> (char)c)     // int 형태를 char 로 형변환합니다.
        .collect(Collectors.toList())    // stream 을 list 로 변환합니다.
    chars ==> [A, B, C, D, H, I, J, O, P, Q, R, W, X, Y]
    
    jshell> chars.size()
    $34 ==> 14
    
    jshell> for(char c: chars) System.out.println(c)
    A
    B
    C
    D
    H
    I
    J
    O
    P
    Q
    R
    W
    X
    Y
    
    • Test1.java
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    public class Test1 {
        public static void main(String args[]) {
            String s = "ABCDefgHIJklmnOPQRstuWXYz";
    
            List<Character> chars = s.chars()
                                .filter(c -> Character.isUpperCase(c))
                                .mapToObj(c -> (char)c).collect(Collectors.toList());
            System.out.println(chars.size());
    
            for(char c: chars) System.out.println(c);
        }
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)