조건문 오류 & 배열안의 원소 개수를 구하는 방법
조회수 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); } }
댓글 입력