此应用程序的设计目标之一便是使用一种标准格式显示所有图像标题,即标题中每一个单词的第一个字母均为大写形式(在英文标题中通常不大写的少数单词除外)。应用程序并不假定文本文件已经包含格式正确的标题,它在从文本文件中提取标题时对标题格式进行设置。
在前面的代码清单中,使用了如下代码行来提取每个图像元数据值:
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()
方法将单词重新合并为一个字符串。
如同其名称所表达的含义,
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
将刚才变为大写形式的第一个字母与其余字母合并在一起,创建出最终的单词。