このアプリケーションの設計に関する決定事項の 1 つは、すべてのイメージタイトルを標準形式で表示し、そのとき各単語の先頭文字を大文字にします(英語タイトルで先頭大文字にしないのが一般的ないくつかの単語は除く)。 適切に整形済みのタイトルがテキストファイルに含まれると見なすのではなく、テキストファイルからの抽出時にタイトルを整形します。
以前のコードリストでは、個々のイメージメタデータ値を抽出する一部として、次のコード行が使用されています。
imageInfo.title = normalizeTitle(imageProperties[1]);
このコードでは、テキストファイルからのイメージのタイトルが、ImageInfo オブジェクトに格納される前に
normalizeTitle()
メソッドを介して渡されます。
private function normalizeTitle(title:String):String
{
var words:Array = title.split(" ");
var len:uint = words.length;
for (var i:uint; i < len; i++)
{
words[i] = capitalizeFirstLetter(words[i]);
}
return words.join(" ");
}
このメソッドは
split()
メソッドを使用して、タイトルを(空白文字で区切られた)個々の単語に分割し、
capitalizeFirstLetter()
メソッドを介して各単語を渡し、次に Array クラスの
join()
メソッドを使用して、単語をもう一度 1 つのストリングに結合します。
名前が示すとおり、
capitalizeFirstLetter()
メソッドは実際に各単語の先頭文字を大文字にする働きがあります。
/**
* Capitalizes the first letter of a single word, unless it's one of
* a set of words that are normally not capitalized in English.
*/
private function capitalizeFirstLetter(word:String):String
{
switch (word)
{
case "and":
case "the":
case "in":
case "an":
case "or":
case "at":
case "of":
case "a":
// Don't do anything to these words.
break;
default:
// For any other word, capitalize the first character.
var firstLetter:String = word.substr(0, 1);
firstLetter = firstLetter.toUpperCase();
var otherLetters:String = word.substring(1);
word = firstLetter + otherLetters;
}
return word;
}
英語では、タイトルの各単語が「and」、「the」、「in」、「an」、「or」、「at」、「of」、または「a」のいずれかである場合、その先頭の文字は大文字にされません。これは簡易版の規則です。このロジックを実行するために、最初に
switch
ステートメントを使用して、先頭を大文字にしない単語のいずれかであるかどうかを確認します。先頭を大文字にしない単語の場合は、
switch
ステートメントからジャンプします。一方、先頭を大文字にする単語の場合は、次のように何ステップかでそれを行います。
-
substr(0, 1)
を使用して、単語の先頭文字を抽出します。この抽出では、第 1 パラメーター
0
が指定するストリングの先頭文字、つまりインデックス 0 の文字から開始するサブストリングを抽出します。サブストリングは、第 2 パラメーター
1
が指定する 1 文字長になります。
-
toUpperCase()
メソッドを使用して、その文字を大文字にします。
-
substring(1)
を使用して、元の単語の残りの文字を抽出します。この抽出では、インデックス 1(第 2 文字)から開始して、ストリングの末尾(
substring()
メソッドの第 2 パラメーターの省略が示す)までのサブストリングを抽出します。
-
firstLetter + otherLetters
の文字連結を使用して、新しく大文字にした先頭文字と残りの文字を結合することによって、最終的な単語を作成します。