4

テキスト領域に入力または貼り付けられた単語をカウントするプログラムに取り組んでいます。ダブルスペースがない場合は、単語を正しくカウントします。これにはsplitメソッドを使用し、forオブジェクトforオブジェクトを使用して単語をカウントします。

これは、問題が発生したコードの部分の最も単純な形式です...


 public static void main(String[] args) {
    String string = "Java  C++ C#";
    String[] str;
    int c=0;
    str = string.split(" ");
    for(String s:str){
        if(s.equals(" "))
            System.out.println("skipped space");
        else{
            System.out.println("--"+s);
            c++;
        }
    }
    System.out.println("words; " + c);
}

オブジェクトsに含まれている文字列がスペースであるかどうかを確認しようとしましたが、どのように実行しても機能しませんでした。

このように出力したい

--Java
skipped space
--C++
--C#

言葉; 3

しかし、結果は

--Java
--
--C++
--C#
words; 4

どうすればこれを解決できるかについての提案はありますか?または、どの部分で問題が発生しましたか?前もって感謝します。

4

3 に答える 3

7

split正規表現が必要です。その力を使用してください。

str = string.split(" +");

//more sophisticated
str = string.split("\\s+");
  • \s任意の空白に一致します(スペースだけでなく、タブ、改行など)
  • +「それらの1つ以上」を意味します
  • 文字列内の特別な意味を削除するために、最初のバックスラッシュは2番目のバックスラッシュをエスケープするために必要です
于 2012-09-30T09:25:00.960 に答える
2

if(s.equals(" "))行を if(s.equals(""))(スペースなしで)に変更する必要があります。その理由はsplit、スペースの間にあるものの配列を提供し、2つのスペースの間に何もないからです。

于 2012-09-30T09:25:36.293 に答える
1

から空の文字列を取得しているので、戻り配列の文字列の内容を確認するためにString.split使用できます。String.equals

if (s.equals("")) {
...

出力:

--Java
skipped space
--C++
--C#
于 2012-09-30T09:25:13.077 に答える