2016-10-31 13 views
0

私は入力(ツイート)を取る必要があり、入力が有効な長さ(最大= 148文字)であれば、そこにいくつの言及とハッシュタグがあるか、そしてメッセージが再ツイートされた「RT:」の場合)。文字列を超えてコンテンツをテストするにはどうすればよいですか?

私はすでにキャップ長と再つぶやきを取り上げましたが、ハッシュや数え方をどのように計算すればよいのか分かりません。これは私が作ってみたものです:

for (int i = 0; i < tweet.length(); i++) { 
    if ((tweet.charAt(i) == '#') && (tweet.charAt(i+1) != ' ')) {  
     hash++; 
    } 
} 

私が直面している問題はハッシュタグがあるか、変数が範囲の外に出ると、私はインデックスの範囲の例外を取得し、文字列の最後に言及している場合ということです。だから、最後に文字を数えずに例外なく同じ効果を得る方法を見つけるのを助ける必要がある。

「関数」という言葉は、ハッシュ「関数」とまったく同じ方法で動作します。

+0

'#charAt(i + 1)'の代わりに、 '#indexOf(" '、/ * start index * /) 'を使ってください。ハッシュタグと部分文字列のインデックスを見つけることができます。さらに、正規表現が気にならない場合は、 ''''に分割して単語が '#'で始まるかどうかを確認することができます。 – Rogue

+1

まあ、i + 1が文字列の長さより小さいことをテストしてください。 –

+0

@ cricket_007ハッシュの後にスペースを入れないように見えます。 – shmosel

答えて

1

i < tweet.length() - 1forループに試してください。

+0

OPはハッシュの末尾をカウントしたくないと仮定します。 – shmosel

+0

@shmoselこれはforループ内の条件によって暗示されます。トークンは '# 'で始まり、直後に空白以外の文字が続く場合、ハッシュと見なされます。それは文字列の最後には起こりません。 (また、twitterの記述/ハッシュタグの文脈を考慮すると、末尾の '# 'はタグ付けしないので、それを数える理由はありません)。 – nbrooks

+0

*の後ろに空白文字*をつけたものはあなたの解釈だけです。技術的に言えば、スペース文字*の後に*がないと解釈することもできます。 – shmosel

関連する問題