Recipe 9.1 Joining Strings

9.1.1 Problem

You want to concatenate (join) together two or more strings into a single value.

9.1.2 Solution

Use the string concatenation operator (+) or the combination concatenation-assignment operator (+=). Alternatively, use the concat( ) method.

9.1.3 Discussion

You can join together multiple strings in a single expression using the concatenation operator (+) between the two string operands:

// Results in a single value of "Thisworks" (no space)
myString = "This" + "works";

If you want to join together more than two strings, use additional concatenation operators and string value operands in the appropriate order:

// Results in a single value of "This works" (with a space)
myString = "This" + " " + "works";

In the preceding examples, there is little reason why you would need to join together the string literals instead of assigning a single string value ("This works" instead of "This" + " " + "works"). However, this demonstrates the technique you'll use when working with dynamic values. You can use the concatenation operator to join together not only string literals, but also variables containing string values (or values that can be converted to strings). For example:

num = 24.
// Results in a single value of "There are 24 people"
myString = "There are " + num  + " people";

The concatenation operator automatically converts any non-string values to strings, as long as at least one of the operands in the statement is a string. In the preceding example, the number value, 24, is converted to the string value "24" automatically before being joined with the other strings. However, if all the operands are numbers, the ActionScript interpreter treats the + operator as the addition operator instead of the concatenation operator:

num1 = 24;
num2 = 42;
// Results in a number value of 66
myString = num1 + num2;

You can concatenate, rather than add, two or more numbers in several ways. One way is to concatenate an empty string to the beginning of the statement:

num1 = 24;
num2 = 42;
// Results in a string value of "2442"
myString = "" + num1 + num2;

The empty string must be placed first in the expression because if the two numbers appear first, they are added rather than concatenated, even though the final value is still converted to a string:

num1 = 24;
num2 = 42;
// Results in a string value of "66"
myString = num1 + num2 + "";

Another option is to use the String( ) function to ensure that at least one of the numbers is converted to a string before performing the concatenation:

num1 = 24;
num2 = 42;
// Results in a string value of "2442"
myString = String(num1) + num2;

When you use this technique for only two numbers, it does not matter which one you convert to a string (or you can convert both). But if you are joining more than two numbers, you should convert the first or second number to a string. Otherwise, the numbers preceding the value that is converted to a string will be added rather than concatenated.

num1 = 24;
num2 = 42;
num3 = 21;
// Results in a string value of "6621"
myString = num1 + num2 + String(num3);

If you want to add, rather than concatenate, two number values in the middle of a string concatenation statement, you should enclose that expression in parentheses. This evaluates the expression first, treating it as an addition operation rather than a concatenation operation.

num1 = 24;
num2 = 42;
// Results in "There are 66 people"
myString = "There are " + (num1 + num2) + " people";

You can also append text to strings using multiple lines of code rather than trying to cram it all into one statement. You should use the combination concatenation-assignment operator in these cases.

myString = "a ";
myString += "quick ";
myString += "brown ";
myString += "fox";

This technique can be useful for several reasons. First of all, sometimes you want to join together long string values, and your code remains more readable when you break it up into multiple lines:

myString = "This is the first line of a long paragraph of text.\n";
myString += "By adding line by line to the string variable you make ";
myString += "your code more readable.";

You may have a good reason to append more text to a string over time rather than all at once. For example, your movie may periodically poll a server-side script that returns updated data. You can append this new data to an existing string using the combination concatenation-assignment operator. For example:

// lv is a LoadVars object.
lv.onLoad = function (  ) {
  // Assume the server script returns a variable named newData. You can append its
  // value (and a newline) to an existing string named myString.
  _root.myString += this.newData + newline;
};

You can also use the String.concat( ) method to append new values to the end of an existing string. The concat( ) method does not affect the original string. Instead, it returns a new string containing the concatenated value.

myString = "first string value.";

// Set myNewString to "first string value.second string value." 
// The value of myString remains unchanged.
myNewString = myString.concat("second string value.");

Flash 4 used the & operator for string concatenation. Flash converts the & operator to the add operator when updating Flash 4 files to Flash 5 or Flash 6 format. The + operator is the preferred string concatenation operator in Flash 5 and later.



    Part I: Local Recipes
    Part II: Remote Recipes