DekGenius.com
[ Team LiB ] Previous Section Next Section

Recipe 9.10 Processing One Character at a Time

9.10.1 Problem

You want to process a string one character at a time.

9.10.2 Solution

Use a for statement and the String.charAt( ) method. Alternatively, use String.split( ) with the empty string as the delimiter to split the string into an array of all the characters, then use a for statement to loop through the array.

9.10.3 Discussion

The simplest way to process each character of a string is to use a for statement that loops from 0 to the length of the string, incrementing by 1. Within the for statement body, you can use the charAt( ) method to extract each character for processing.

myString = "a string";

// Loop from 0 to the length of the string.
for (var i = 0; i < myString.length; i++) {
  /* Output each character, one at a time. This displays:
     a

     s
     t
     r
     i
     n
     g
  */
  trace(myString.charAt(i));
}

You can achieve the same effect by using the split( ) method to first split the string into an array of characters and then looping through the array to process each character. You should use the empty string as the delimiter parameter for the split( ) method to split between each character.

myString = "a string";

// Split the string into an array of characters (one-character strings).
chars = myString.split("");

// Loop through all the elements of the chars array.
for (var i = 0; i < chars.length; i++) {
  /* Output each character element. This displays:
     a

     s
     t
     r
     i
     n
     g
  */
  trace(chars[i]);
}

Both techniques are generally interchangeable, though the second offers some advantages if you want to process the characters using common array methods. For example, if you first split a string into an array of characters, you can sort that array. This is not as easily done when you use the charAt( ) technique:

myString = "a string";

chars = myString.split("");

// Alphabetically sort the array of characters.
chars.sort(  );

for (var i = 0; i < chars.length; i++) {
  /* Displays:
     
     a
     g
     i 
     n
     r
     s
     t
  */
  trace(chars[i]);
}

Also, if you want to use this process to remove every instance of a particular character, it is easier with an array than with the charAt( ) technique:

myString = "a string";

chars = myString.split("");

for (var i = 0; i < chars.length; i++) {
  // Remove all "r" elements from the array. Be sure to decrement i if an element is
  // removed. Otherwise, the next element is improperly skipped.
  if (chars[i] == "r") {
    chars.splice(i, 1);
    i--;
  }
}

// Displays: a sting
trace(chars.join(""));

9.10.4 See Also

Though the preceding technique for replacing characters works for simple cases, you should see Recipe 9.9 for more capable alternatives.

    [ Team LiB ] Previous Section Next Section