這個應用程式的其中一項設計決定,便是讓所有影像標題都以標準格式顯示,也就是將每個字的第一個字母都改為大寫 (只有少數通常在英文標題裡不大寫的字不改)。應用程式不會假設文字檔包含格式正確的標題,而會在擷取文字檔中的標題時予以格式化。
在前面列出的程式碼中,當擷取個別影像中繼資料值時,會使用下面這一行程式碼:
imageInfo.title = normalizeTitle(imageProperties[1]);
在此程式碼中,從文字檔擷取的影像標題會透過
normalizeTitle()
方法傳遞,然後再儲存到 ImageInfo 物件中:
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()
方法,將這些字再次組合成單一字串。
顧名思義,
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)
擷取單字的第一個字母,這個方法會從索引位置為 0 的字元 (即字串中的第一個字母,因為第一個參數為
0
) 開始擷取子字串。子字串的長度為一個字元 (因為第二個參數為
1
)。
-
使用
toUpperCase()
方法,將該字母改為大寫。
-
原字的其它字元則使用
substring(1)
擷取,這個方法會從索引位置為 1 的字元 (即第二個字母) 開始擷取子字串,一直擷取到字串的結尾 (因為
substring()
方法的第二個參數沒有指定)。
-
最後會使用字串連接,將剛改為大寫的首字母與其它字母結合來產生單字:
firstLetter + otherLetters
。