En av de utseendemässiga frågorna i detta program är att alla bildrubriker visas i ett standardformat, där alla ord inleds med versal bokstav. Programmet formaterar rubrikraderna allteftersom de extraheras från textfilen, i stället för att anta att textfilen innehåller korrekt formaterade rubriker.
I föregående kodexempel används följande rad vid extrahering av enstaka bildmetadatavärden:
imageInfo.title = normalizeTitle(imageProperties[1]);
I den koden skickas textfilens bildrubrik via metoden
normalizeTitle()
innan den sparas i objektet 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(" ");
}
I metoden delas rubriken upp till separata ord (avgränsade med blanksteg) med metoden
split()
. Sedan överförs varje ord igenom metoden
capitalizeFirstLetter()
och slutligen sätts orden samman igen till en sträng med metoden
join()
från klassen Array.
Med hjälp av metoden
capitalizeFirstLetter()
ändras varje ord och ges en inledande versal:
/**
* 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;
}
I det engelska språket kommer
inte
följande ord att få en inledande versal: ”and”, ”the”, ”in”, ”an”, ”or”, ”at”, ”of” eller ”a”. (Detta är en förenklad version av reglerna.) För att tillämpa den här logiken används först en
switch
-sats som kontrollerar om ordet är något av de ord som inte ska ha inledande versal. Om detta stämmer hoppar koden ur
switch
-satsen. Men om ordet ska ges inledande versal görs detta i flera steg:
-
Den första bokstaven i ordet extraheras med
substr(0, 1)
, vilket ger en delsträng som börjar med tecknet på index 0 (anges med den första parametern
0
). Delsträngen blir ett tecken långt (anges med den andra parametern
1
).
-
Detta tecken ändras till en versal med metoden
toUpperCase()
.
-
Återstående tecken i det ursprungliga ordet extraheras med
substring(1)
, som extraherar en delsträng med början på index 1 (den andra bokstaven) till slutet på strängen (anges med att den andra parametern i metoden
substring()
utelämnas).
-
Ordet skapas slutligen genom att den nya versala första bokstaven kombineras med återstående bokstäver med hjälp av strängsammanfogning:
firstLetter + otherLetters
.