12.6.单词分析

问题
我想处理字符串中的单词
解决办法
使用split( )方法
讨论
split( )方法根据指定的分隔符把分离的子串存入数组,要把字符串分离出单词,可空格作为分隔符。
+展开
-ActionScript
// 创建含有多个单词的字符串
var example:String = "This is a string of words";
//用空格作为分隔符分离字符串
var words:Array = example.split( " " );
//循环数组处理每个单词
for ( var i:int = 0; i < words.length; i++ ) {
/* 显示:
this
is
a
string
of
words
*/

trace( words[i] );
}

处理单词有很多方法,下面的完整例子演示分离字符串及显示单词:
+展开
-ActionScript
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
public class ActionScriptPoetry extends Sprite {
public function ActionScriptPoetry( ) {
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
// 创建字符串
var example:String = "This is a string of ActionScript poetry words";
var words:Array = example.split(" ");
var word:Sprite;
var wordText:TextField;
//遍历每个单词
for ( var i:int = 0; i < words.length; i++ ) {
// 为每个单词创建sprite并显示在屏幕上
word = new Sprite( );
addChild( word );
// 创建一个文本框
wordText = new TextField( );
word.addChild( wordText );
// 设置文本框大小,边框,背景颜色
wordText.autoSize = TextFieldAutoSize.LEFT; // Left-justify the text
wordText.border = true;
wordText.background = true;
wordText.selectable = false;
// 设置每个文本框显示一个单词
wordText.text = words[i];
// 点击sprite可拖动
word.addEventListener( MouseEvent.MOUSE_DOWN, handleDrag );
word.addEventListener( MouseEvent.MOUSE_UP, handleDrop );
// sprites的位置随机
var rx:Number = Math.random( ) * stage.stageWidth - word.width;
var ry:Number = Math.random( ) * stage.stageHeight - word.height;
word.x = rx;
word.y = ry;
trace(word);
}
}
// 当用户鼠标在单词上点击时调用该函数
private function handleDrag( event:MouseEvent ):void {
// 当前事件目标为TextField,因此它的父对象为sprite
var word:Sprite = event.target.parent;
// 让单词置顶显示
setChildIndex( word, numChildren - 1 );
// 让单词可拖动
word.startDrag( );
}
// 当松开鼠标时调用该函数
private function handleDrop( event:MouseEvent ):void {
// 事件目标为TextField,其父对象为Sprite
var word:Sprite = event.target.parent;
// 停止拖动
word.stopDrag( );
}
}
}

上面的代码使用split( )函数以空格作为分隔符分离单词,在这里原始字符串还不包括标点符号,如果含有标点符号或其他特殊符号则需用正则表达式作为split的参数过滤掉这些符号才能正确分离出单词,比如下面的正则表达式匹配可以清除掉单词周围的标点符号/[^a-zA-Z0-9]+/.
+展开
-ActionScript
// 创建有标点符号的字符串.
var example:String = "Here are some words. Also, here is some punctuation!";
// 用空格分离出单词,这些单词还含有标点符号
var words:Array = example.split( ' ' );
// 显示这些单词,他们还包含标点符号
for ( var i:int = 0; i < words.length; i++ ) {
/* Outputs:
Here
are
some
words.
Also,
here
is
some
punctuation!
*/

trace( words[i] );
}
// 使用正则表达式分离出正确的单词
words = example.split( /[^a-zA-Z0-9]+/ );
// 再次输出这些单词看看,现在已经没有标点符号了
for ( i = 0; i < words.length; i++ ) {
/* Outputs:
Here
are
some
words
Also
here
is
some
punctuation
*/

trace( words[i] );
}

关于正则表达式,请看第十三章。

加支付宝好友偷能量挖...


评论(0)网络
阅读(117)喜欢(0)flash/flex/fcs/AIR