これは宿題なので、コードは差し控えます。しかし、私はあなたに解決策を説明します。それからコードを再構築できるかどうかを確認してください。
この方法では、無視したいので、最初に行の最初と最後から空白を削除します。trim()
そのための方法を使用してください。次に、コードで行ったように、文字列が空の文字列(""
)であるかどうかを確認します。そうである場合は、空の文字列に単語が含まれていないため、ゼロを返します。そうでない場合は、無限ループ(while (true)
)で次の条件を確認します。
- 現在のインデックスを保持する変数を作成します。この変数はループに対してローカルではありませんが、メソッドに対してローカルです。無限ループの反復ごとに、現在の文字(
charAt()
メソッドを使用)がスペースではないかどうか、およびインデックスが文字列の長さよりも小さいかどうかを確認してください。この条件が真の場合、インデックス変数をインクリメントします。
- そうでない場合は、インデックス変数が文字列の長さと等しいかどうかを確認します。はいの場合、文字列の最後の単語に到達したことを意味するため、1を返します。
- そうでない場合は、1の合計と単語をカウントするメソッドを返し、インデックスの現在の値から部分文字列を再帰的に呼び出します。
これはあなたに価値を与えるはずです。それでもできない場合は、お知らせください。ソースをお知らせします。
編集Stringのtrimメソッドを使用できない場合は、次のように自分で作成できます。私はそれがあなたの要件のいずれにも違反していないと信じています:
private String trim(String str) {
int beginIndex = 0;
int endIndex = str.length() - 1;
while (true) {
if (str.charAt(beginIndex) == ' ') {
beginIndex++;
} else if (str.charAt(endIndex) == ' ') {
endIndex--;
} else {
break;
}
}
return str.substring(beginIndex, endIndex);
}
編集2どちらも使用できない場合はlength()
、上記のコード行int endIndex = str.length() - 1;' to
int endIndex = getLength(str)-1; `を変更し、次のコードを使用して長さを計算します。
private int getLength(String str) {
int length = 0;
while (true) {
try {
str.charAt(length++);
} catch (StringIndexOutOfBoundsException e) {
break;
}
}
return --length;
}
編集3質問はそのようなPITAであるため、言葉で説明するのは難しいでしょう。コードは次のとおりです。
private int countWords(String searchString) {
int index = 0;
boolean beginning = true; // to check if it's the beginning of the line
if (searchString.equals("")) {
return 0;
} else {
while (true) {
try {
if (searchString.charAt(index) != ' ') {
beginning = false;
index++;
} else {
if (!beginning) {
return 1 + countWords(searchString.substring(++index));
} else {
return countWords(searchString.substring(++index));
}
}
} catch (StringIndexOutOfBoundsException e) {
if (!beginning) {
return 1;
} else {
return 0;
}
}
}
}
}
これは、使用が許可されている方法だけで目的を達成するのに役立ちます。