菜单

经过实例学习Virtools脚本语言VSL – 解析字符串。JS截取字符串常用方法整理与应用示例。

2018年9月21日 - 中甲报道

欠习题演示解析字符串及用字符串中带有的音填写充数组(Array)。

使用 substring()或者slice()
函数:split()
作用:使用一个点名的隔符把一个字符串分割存储到数组
例子:

  1. 初始一个新的著述并创造一个数组(Array)。把数组重命名为 “Players”
    (没有引号) 并上加三独列(column),如下命名 – 列类型:

    • NickNames – String
    • Age – Integer
    • Score – Integer.
  2. 于Level下创办新本子,并丰富一个Run VSL BB。在VSL Script
    Manager中添加个别独pIn。第一个pIn重命名也”data”,类型设为String。第二个pIn重命名吧”array”,类型设为Array。
  3. 切换到
    Schematic工作区,输入以下字符(不包引号),作为“data”pIn的价:

    “Eva,22,1024.
    Jane,34, 544.
    Pierre, 17, 5410.
    John, 85,10.”

    卿也许想使拓展’data’ pIn中的数量输入的字段。

    构想是分析输入的字符串,提取出中的音信,然后复制到数组中。该习题中,所急需之音信是名、年龄和积分。逗号和句号作为数据是引不起人们感兴趣之,但当隔断数据字段或标志行结束点的字符是格外实用之。你见面为此到VSL
    <- SDK 对许表 –
    类与法
    中列有了的StringTokenizer类。给一定要分析的字符串及下的分隔符,”NextToken(str
    iPrevToken)” 这个办法就见面一个个的领取出令牌。

    【译注:网络资源 –
    bruce


    在邱仲潘译的《Mastering Java 2》有这样一段落

     StreamTokenizer类根据用户定义的条条框框,从输入流中提取可甄别的子串和标记符号,这个过程叫令牌化
    (tokenizing ),因为流简化为了令牌符号。令牌 (token
    )通常代表重要字、变量名、字符串、直接量 和大括号等语法标点。

    我们参考邱仲潘的及时段译文,统一为
    token:令牌
    tokenizing:令牌化
    tokenizer:令牌解析器

    cherami提到的翻啊“标记”,也得以清楚,但token更规范的依靠一个字串(或流)中的因为空格、’,’等(用户指定的规则)分割开来之一个一个的子串,使用“标记”好像范围比小。借用令牌网中的是术语--“令牌”,我以为甚像。

  4. 在代码窗口中输入下面的代码:

    void main()
    
    {
    
        // We clear all data in the array
    

复制代码 代码如下:

        array.Clear();



        // We create the first tokenizer in order to

        // get data line by line. The "." separates lines.


        str tokenLine = null;

        StringTokenizer tokenizerLine(data.CStr(), ".");



        int row = 0;



        // Get new line


        while (tokenLine = tokenizerLine.NextToken(tokenLine))

        {

            // For each line extracted, we add a row in the array


            array.AddRow();



            // The second tokenizer works with the extracted line

            // to extract the data on a word by word basis.

            // The "," separates words.


            str tokenWord = null;

            StringTokenizer tokenizerWord(tokenLine, ",");



            int column = 0;



            // Get new word


            while (tokenWord = tokenizerWord.NextToken(tokenWord))

            {

                // Insert word in the array


                array.SetElementStringValue(row, column, tokenWord);

                ++column;

            }           

            ++row;

        }

    }

str=”jpg|bmp|gif|ico|png”;
arr=theString.split(”|”);
//arr是一个暗含字符值”jpg”、”bmp”、”gif”、”ico”和”png”的数组

  1. 编译VSL脚本并运行。要肯定好数组中的情节如下:

函数:John()
效果:使用你选择的隔符将一个数组合并为一个字符串
例子:

[![](https://sites.google.com/site/x3dofcn/_/rsrc/1245403946960/vsl-virtools/Examples/4_parse-string/vsl_parse1.png)](https://sites.google.com/site/x3dofcn/vsl-virtools/Examples/4_parse-string/vsl_parse1.png?attredirects=0)



你可以看到,"Jane", "Pierre" 和
"John"这几个名字提取得不是很好,它们都以一个换行符开始(非打印换行符以一个小盒子的样子显示)。为了移除这个额外的字符,你需要给VSL脚本添加一个移除换行符的函数。下面的代码应该能完成这个任务:  

    void       RemoveFirstReturnCharacter(String str2clear)

    {

        // If first character is equal to return...


        if (str2clear[0] == '/n')

            / ... crop string from second character to the end


            str2clear = str2clear.Crop(1, str2clear.Length()-1);

    }

复制代码 代码如下:

  1. 改你的代码,要包括地方的函数。你的代码现在应当是如这样子:

    void main()
    
    {
    
        // We clear all data in the array
    

var delimitedString=myArray.join(delimiter);
var myList=new Array(”jpg”,”bmp”,”gif”,”ico”,”png”);
var portableList=myList.join(”|”);
//结果是jpg|bmp|gif|ico|png

        array.Clear();



        // We create the first tokenizer in order to

        // get data line by line


        str tokenLine = null;

        StringTokenizer tokenizerLine(data.CStr(), ".");



        int row = 0;



        // Get new line


        while (tokenLine = tokenizerLine.NextToken(tokenLine))

        {

            // For each line extracted, we add a row in the array


            array.AddRow();



            // The second tokenizer works with the extracted line

            // to extract the data on a word by word basis.

            // The "," separates words.


            str tokenWord = null;

            StringTokenizer tokenizerWord(tokenLine, ",");



            int column = 0;



            // Get new word


            while (tokenWord = tokenizerWord.NextToken(tokenWord))

            {

                // Remove first character if it's a '/n'


                String strToClear = tokenWord;

                RemoveFirstReturnCharacter(strToClear);



                // Insert word in the array


                array.SetElementStringValue(row, column, strToClear.CStr());

                ++column;

            }           

            ++row;

        }

    }


现在,在把单词插入数组之前,新的函数检查字符串并对之修改(如果有必要) -
移除换行符。  

函数:substring()
成效:字符串截取,比如想由”MinidxSearchEngine”中取得”Minidx”就如用到substring(0,6)

  1. 编译你的VSL脚本并运行。你的数组现在是匪是圈起好多矣?

函数:indexOf()
功能:返回字符串中相当配子串的第一只字符的下标

[![](https://sites.google.com/site/x3dofcn/_/rsrc/1245403976002/vsl-virtools/Examples/4_parse-string/vsl_parse2.png)](https://sites.google.com/site/x3dofcn/vsl-virtools/Examples/4_parse-string/vsl_parse2.png?attredirects=0)

复制代码 代码如下:

var myString=”JavaScript”;
var w=myString.indexOf(”v”);w will be 2
var x=myString.indexOf(”S”);x will be 4
var y=myString.indexOf(”Script”);y will also be 4
var z=myString.indexOf(”key”);z will be -1

续:

1.substring 方法

概念跟用法
substring 方法用于取字符串中介于片个指定下标之间的字符。

语法
stringObject.substring(start,stop)

参数 描述
start 必需。一个非负的平头,规定而提的子串的首先只字符在 stringObject
中之岗位。
stop 可选。一个非负的整数,比要提取的子串的尾声一个字符在 stringObject
中的职务基本上 1。如果看略该参数,那么回的子串会一直到字符串的最终。

返回值
一个初的字符串,该字符串值包含 stringObject 的一个子字符串,其情是由
start 处到 stop-1 处的所有字符,其长度也 stop 减 start。

说明
substring 方法返回的子串包括 start 处的字符,但切莫包括 end 处的字符。
如若 start 与 end 相等,那么该办法返回的就是一个空白(即长度也 0
的字符串)。
倘 start 比 end 大,那么该方法以领取子串之前会先行交换这点儿个参数。
苟 start 或 end 为负数,那么它用为调换为 0。

2.substr 方法

概念及用法
substr 方法用于返回一个从指定位置上马的指定长度的子字符串。

语法
stringObject.substr(start [, length ])

参数 描述
start 必需。所要的子字符串的苗子位置。字符串中之第一单字符的目为 0。
length 可选。在回的子字符串中承诺包括的字符个数。

说明
只要 length 为 0 或负数,将回来一个空字符串。
倘若没点名该参数,则子字符串将连续到stringObject的末段。

举例:

复制代码 代码如下:

var str = “0123456789”;

alert(str.substring(0));————“0123456789”
alert(str.substring(5));————“56789”
alert(str.substring(10));———–“”
alert(str.substring(12));———–“”
alert(str.substring(-5));———–“0123456789”
alert(str.substring(-10));———-“0123456789”
alert(str.substring(-12));———-“0123456789”
alert(str.substring(0,5));———-“01234”
alert(str.substring(0,10));———“0123456789”
alert(str.substring(0,12));———“0123456789”
alert(str.substring(2,0));———-“01”
alert(str.substring(2,2));———-“”
alert(str.substring(2,5));———-“234”
alert(str.substring(2,12));———“23456789”
alert(str.substring(2,-2));———“01”
alert(str.substring(-1,5));———“01234”
alert(str.substring(-1,-5));——–“”

alert(str.substr(0));—————“0123456789”
alert(str.substr(5));—————“56789”
alert(str.substr(10));————–“”
alert(str.substr(12));————–“”
alert(str.substr(-5));————–“0123456789”
alert(str.substr(-10));————-“0123456789”
alert(str.substr(-12));————-“0123456789”
alert(str.substr(0,5));————-“01234”
alert(str.substr(0,10));————“0123456789”
alert(str.substr(0,12));————“0123456789”
alert(str.substr(2,0));————-“”
alert(str.substr(2,2));————-“23”
alert(str.substr(2,5));————-“23456”
alert(str.substr(2,12));————“23456789”
alert(str.substr(2,-2));————“”
alert(str.substr(-1,5));————“01234”
alert(str.substr(-1,-5));———–“”

而可能感兴趣的章:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图