UPDATE Please note that making an array this way is suitable only when IFS is a single non-whitespace character and there are no multiple-consecutive delimiters in the data string.
For a way around this issue, and a similar solution, go to this Unix & Linux question ... (and it is worth the read just to get more of an insight into IFS.
Use bash (and other POSIX shells, e.g. ash, ksh, zsh)'s IFS (Internal Field Seperator).
Using IFS avoids an external call, and it simply allows for embeded spaces.
# ==============
A='token0:token1:token2.y token2.z '
echo normal. $A
# Save IFS; Change IFS to ":"
SFI=$IFS; IFS=: ##### This is the important bit part 1a
set -f ##### ... and part 1b: disable globbing
echo changed $A
B=($A) ### this is now parsed at : (not at the default IFS whitespace)
echo B...... $B
echo B[0]... ${B[0]}
echo B[1]... ${B[1]}
echo B[2]... ${B[2]}
echo B[@]... ${B[@]}
# Reset the original IFS
IFS=$SFI ##### Important bit part 2a
set +f ##### ... and part 2b
echo normal. $A
# Output
normal. token0:token1:token2.y token2.z
changed token0 token1 token2.y token2.z
B...... token0
B[0]... token0
B[1]... token1
B[2]... token2.y token2.z
B[@]... token0 token1 token2.y token2.z
normal. token0:token1:token2.y token2.z