2016-05-05 35 views
-2

文字列内の大文字の総数を数える必要がありますが、複雑なif文や検査がなくてもそれを行う方法を理解できません。Javaの文字列の大文字をカウントするには?

私が試したし、このような何かを下に書いている:

private int uppercaseWordsCount(String input){ 
    count = 0; 
    String[] ss = input.split("\\s"); 
    for (String s: ss){ 
     //??? 
     } 

    } 

    return count; 

} 

をそして、私はまだ私のニーズに合わせて、良好な状態について見当もつかない。私が書いているシステムの残りの部分は既にそうしているように、事柄は私が全単語(感嘆符のような特殊文字はメソッドの目的のために大文字として数えます)を扱わなければならず、単一の文字ではありません。

+2

複数の小切手または複雑なif文を記述する際に何が問題になりますか? – Brian

+0

問題を解決してください。 '??? '部分には何が入りますか?おそらく、「これが大文字の場合は、カウンターを増やしてください。だから、 "これは大文字ですか?" booleanを返すメソッドを使用します。今度はその方法を実装する必要がありますが、解決するのがより簡単な問題です。 – yshavit

+0

@Brianシンプルな解決策がある限り、私はむしろオッカムの勝利のための剃刀です! とにかく、私は満足のいく答えを見つけることができました。興味を持っていただきありがとうございます! – Anacarnil

答えて

1

各単語を取得するために現在行っているように、各文字列をsplit()呼び出しで分割することができます。この時点で、それぞれの単語を比較して大文字かどうかをどのように処理するかのオプションがあります。

はあなたにもtoUpperCase()メソッドを使用して、同様の大文字に文字列を比較し、定期的に反対の文字列をチェックしてくださいに応じ

// The string is the same as an upper-cased version of itself 
if(s.equals(s.toUpperCase())){ 
    // Then increment your count 
    count++; 
} 

をインクリメントする可能性が大文字バージョンに

をあなたの文字列を比較します式

また、正規表現を使用して、すべての文字

// Increment your count if the string consists of only uppercase characters 
if(s.matches("^[A-Z]+$")){ 
    count++; 
} 
+0

それは簡単でしたか?どうもありがとうございました!あなたが見ることができるように、私はJavaで何年も何も書かなかったので、いくつかの錆を積み重ねました。 :D – Anacarnil

+0

's == s.toUpperCase()'はおそらく 's.equals(s.toUpperCase())'になるはずです。JDK 7の実装では、文字列がすでに大文字である場合に 'this'を返すようになっています;その振る舞いはメソッドコントラクトには指定されていないので、私は個人的にそれに頼ることはしません。 (特に、String#equalsが2つのインスタンスが同じであれば、trueを返すようになっています。) – yshavit

+0

素晴らしい点。私はJavaを書く必要があったので、それは長い時間でした、私はそれに応じてそれを更新します。 –

1

これは、Java 8

public static long countUpperCaseWord(String input) { 
    // your object must be not null 
    Objects.requireNonNull(input); 

    // new stream of the array returned by the split call on input string 
    return Stream.of(input.split("\\s")) 
       // we create a second stream that match the predicate passed throw the method filter 
       .filter(word -> word.equals(word.toUpperCase())) 
       // finally we want to count how many words match this predicate 
       .count(); 
} 

エントリで大文字の文字をカウントする必要がある場合を使用してそれを行う方法です:

public static long countUpperCase(String input) { 

    return input.chars() 
       .map(i -> (char) i) 
       .filter(c -> Character.isUpperCase(c)) 
       .count(); 
    } 
文字列内 matches()方法を経由して大文字されています

そして、より一般的なコードを使用してこれを改善したい場合は、次のように書くことができます:

public static long countWordsUsingPredicate(String input, Predicate<String> predicate) { 
    Objects.requireNonNull(input); 

    return Stream.of(input.split("\\s")) 
       .filter(predicate) 
       .count(); 
} 

及び方法に関するラムダ式として、あなたの述語を渡すことによって、このutilのメソッドを呼び出す:

countUpperCaseWord("THIS BREAK", word -> word.equals(word.toUpperCase())) 
+0

私の編集で最初の方法を試してください。申し訳ありませんが、2番目の方法は、エントリ内の大文字の文字を数えることです –

+0

私はJava 8に慣れていません。ありがとうございました! – Anacarnil

0

簡単な方法は、あなたの「大文字の単語パターン」を定義し、それに対してマッチを数えることである。

Pattern pattern = Pattern.compile("\b[A-Z\!\@\$\%\^\&\*\(\)\[\]]\S+\b"); 
Matcher matcher = pattern.matcher("Your Input String Here"); 
int count = 0; 
while (matcher.find()) { count++; } 
System.out.printf("%d uppercase words.%n", count); 
関連する問題