私のAP Computer Scienceクラスでは、文字列(この場合は常にツイートです)を入力してcharlimitに合致するかどうかを確認する必要がありますそれがretweetであるかどうかを確認し、ハッシュタグとメンションを数えます。私はこれをすべて考え出しましたが、ハッシュタグや言及をカウントするためには、スペースやそれに続くリターンはないはずです。 - 私はそれがあろうと期待して数値を使用特定の文字列をスキャンして数えます
for(int i=0; i < tweetLength; i++) {
if((tweet.charAt(i) == '@')&&((tweet.charAt(i+1) != 0)||(tweet.charAt(i+1) != 32)||(tweet.charAt(i+1) != 13))) {
countMentions++;
} if((tweet.charAt(i) == '#')&&((tweet.charAt(i+1) != 0)||(tweet.charAt(i+1) != 32)||(tweet.charAt(i+1) != 13))) {
countHashtags++;
} if(((tweet.charAt(i) == 'R')||(tweet.charAt(i) == 'r'))&&((tweet.charAt(i + 1) == 'T')||(tweet.charAt(i + 1) == 't'))&&(tweet.charAt(i + 2) == ':')) {
retweet = true;
}
}
は注意、32、13、0はスペース、リターン、およびヌル(私が思うに、笑)のASCII値です:私の現在のソリューションはこれです奇妙なことに私の問題を解決しますが、残念ながら、それはありませんでした。
それはすべて正常に動作しますが、アンパサンドまたは文字列の最後にハッシュ記号がある場合、それは、このエラーを返します。
java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.charAt(String.java:686)
at Main.main(Main.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
が、私はそれがあるので、これが原因とされていることを知っていますnullを読み込もうとしていますが、私は本当に解決策を見つけることができません。先生は "ビデオ経由で教える"のようです。
'tweet.charAt(i + 1)' - これは文字列の最後にあるときに壊れます。 –
個人的には、これを解決するために正規表現を使用したいと思います(ただし、学校/大学の割り当てと同じように禁止されています)。ここでは 'i + 1'があなたの文字列の範囲内にあるかどうか最初にチェックする必要があります – UnholySheep