4

文字 c が最初に s に連続して出現する回数を返すメソッドを作成しようとしています。スペースでも連続カウントを区切ります。つまり、「プログラミングが苦手です」という文字列です。char c が 'a' の場合、1 のみを返す必要があります。

以下のコードはコンパイルされますが、正しい答えが出力されません。この問題に取り組む際の私の一般的な論理を示すためのものです。

public class WordCount
{
  public int countRun( String s, char c )
  {
    int counter = 0;
    for( int i = 0; i < s.length(); i++)
    /*There should be other conditions here that checks for first
      appearance consecutively. I've tried my fair share, but no
      luck on getting correct results.*/
    {
      if( s.charAt(i) == c )
      {
        counter += 1;
      }
    }
    return counter;
  }

  public static void main( String args[] )
  {
    WordCount x = new WordCount();
    System.out.println( x.countRun( "Add dog", 'd' ) ); //should return 2
    System.out.println( x.countRun( "Add dog", 'D' ) ); //should return 0
    System.out.println( x.countRun( "Hope you're happy", 'p' )); //should return 1
    System.out.println( x.countRun( "CCCCCcccC", 'C' )); //should return 5
  }
}

いくつかのポインター (論理的またはコード) が必要なだけです。おそらく、これまでに見たことのない Strings のメソッドがあり、プログラムをより簡単にすることができます。私はプログラミングと Java の知識が非常に限られています。

編集:これが宿題の一部なのか、それとも何なのか疑問に思っている人のために、これは非常に古い中間試験からの質問でした. 私はそれを間違えましたが、何らかの理由で、その時点で正しい答えを尋ねることは決してありませんでした. 私は今日それを見て、答えを知っているかどうかを知りたがっていました。私はないように見えます。

4

4 に答える 4

7

あなたは一行でそれを行うことができます:

int result = s.replaceFirst(".*?(" + c + "+).*", "$1").length();

sこのコードは、正規表現を使用して、 の最初の連続した出現 箇所を基本的に抽出し、cその長さを取得します。

これは、発生がない場合にも機能し、ゼロになります。

ライブデモをご覧ください。

于 2013-05-31T04:38:58.280 に答える