JavaScript对象:字符串

第1关:查找字符串的位置

任务描述

本关任务:调用JavaScript内置的函数实现字符串的查找。

相关知识

indexOf()

子字符串指一个字符串中连续的一部分。

上图中有两个字符串aaabcabc,将abc从左往右在aaabc中查找,第一次出现的位置是在aaabc的索引2处。

indexOf()就是返回某个字符串在字符串中首次出现的位置。如果搜索到尾部还没有找到,返回-1

indexOf(a,b)中参数a是字符串;b是开始查找的位置,即从调用者(一个字符串)的第几个位置开始查找,可选。

 
  1. var short = "ab";
  2. var long = "aabccccaab";
  3. var mix = "cdef";
  4. long.indexOf(short);//返回1
  5. long.indexOf(short,4);//返回8
  6. long.indexOf(mix);//返回-1

可以看到第4行与第5行的结果不同,因为第5行是从long的第5个字符开始查找的。

lastIndexOf()

从名字上就可以知道,这个函数与indexOf()功能很相似,区别是搜素方向是从后往前搜索。

lastIndexOf()也有两个参数,含义同indexOf()

 
  1. var short = "ab";
  2. var long = "aabccccaab";
  3. var mix = "cdef";
  4. long.lastIndexOf(short);//返回8
  5. long.lastIndexOf(short,4);//返回1
  6. long.lastIndexOf(mix);//返回-1

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 函数mainJs()有两个字符串参数ab,其中b比较短;

  • 要求将b从左到右在a中查找,返回查找的位置之和;

  • 比如aabababbabb在三个地方与a的子串查找,位置分别是024,返回他们的和6

  • 具体请参见后续测试样例。

测试说明

测试过程:

  • 平台将读取用户补全后的StringPartOne.js

  • 调用其中的的mainJs()方法,生成并输入若干组测试数据;

  • 接着根据测试后的输出判断程序是否正确。

以下是测试样例:

测试输入: ababab,ab 预期输出: 6

function mainJs(a,b) {
	//请在此处编写代码
	/********** Begin **********/
     var c=a.indexOf(b);
     var sum=0;
     while(c>=0){
         sum +=c;
         c=a.indexOf(b,c+b.length);
     }
    
    return sum;
    
	/********** End **********/

}

 
第2关:求指定位置的字符

任务描述

大家的身份证号都是18位,其中的前六位是所在籍贯的省市县的编码,根据它,就可以知道一个人是哪里人。

本关任务:取出身份证的前六位。

相关知识

charAt()

charAt()作用是返回调用者指定位置的字符,位置从0计数:

 
  1. var str = "abcdefg";
  2. console.log(str.charAt(0));//输出a
  3. console.log(str.charAt(str.length-1));//输出g

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • mainJs()的参数a是一个身份证号,要求返回其中的前六位;

  • 具体请参见后续测试样例。

测试说明

测试过程:

  • 平台将读取用户补全后的CharAt.js

  • 调用其中的的mainJs()方法,生成并输入若干组测试数据;

  • 接着根据测试后的输出判断程序是否正确。

以下是测试样例:

测试输入: 342901199612091111 预期输出: 342901
 

function mainJs(a) {
	//请在此处编写代码
	/********** Begin **********/
      var i=0;
    var b="";
    while(i<6){
    
    b+= a.charAt(i);
   
    i++;
    }
    
    return b;  
    
	/********** End **********/
}


第3关:字符串的截取

任务描述

生物系的Sivan博士在做DNA测定的时候,不小心往碱基对序列中(由ATGCU组成的序列)插入了无关的字符串,他想请你帮忙,删掉这些无关的字符串。

本关任务:利用字符串的截取功能实现剔除无关字符串。

相关知识

字符串的截取是指获得原来字符串连续的一部分。这种操作很常见,比如现在各大互联网企业的招聘官网上,应聘者在填入身份证号码后,页面会自动截取中间6位生成出生日期,这是一种提高页面体验的方式。

slice()

slice(a,b)的作用是截取a位置()到b位置(不含)之间的字符串,被截取的字符串不变,返回截取后获得的子字符串。比如a0b3,则截取0、1、2三个位置的字符。

b为可选参数,不填则表示截取到字符串的尾部ab为负数时表示从右往左排,即-1表示最右侧的位置,依次类推。

 
  1. var str = "0123456789";
  2. console.log(str.slice(0,4));//输出0123
  3. console.log(str.slice(3));//输出3456789
  4. console.log(str.slice(-3));//输出789
  5. console.log(str.slice(-5,-2));//输出567

substring()

substring(a,b)slice(a,b)功能相同,参数的意义也相同:ab都是表示位置的数字。只是参数的处理有些不同:

  • ab为负数时,自动转换为0

  • a大于b时,编译器会自动对调两者。

 
  1. var str = "0123456789";
  2. console.log(str.substring(0,4));//输出0123
  3. console.log(str.substring(-1,4));//输出0123
  4. console.log(str.substring(4,0));//输出0123

substr()

与上面的两个函数不同,substr(a,b)指定开始位置和要截取的长度

a表示开始位置(包含);b表示截取的长度,可选。不填则截取到字符串结尾处;

a为负数时表示从右往左排,即-1表示最右侧的位置,依次类推。

 
  1. var myStr = "0123456789";
  2. console.log(myStr.substr(3));//输出3456789
  3. console.log(myStr.substr(3,2));//输出34
  4. console.log(myStr.substr(-2));//输出89

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 参数a表示待处理的碱基对序列,参数b表示可能的杂质字符串,a中只混入了0个或者1个杂质b,无其它杂质字符串;

  • 你需要删除杂质b,返回无杂质的a碱基对;

  • 请参考测试样例加深理解。

测试说明

测试过程:

  • 平台将读取用户补全后的Slice.js

  • 调用其中的mainJs()方法,然后输入若干组测试数据;

  • 接着根据测试结果判断程序是否正确。

以下是测试样例:

测试输入: ATGCU123TAACU,123 预期输出: ATGCUTAACU

 

function mainJs(a,b) {
	//请在此处编写代码
	/********** Begin **********/
      var c=a.indexOf(b)
    if(c!=-1){
        return(a.slice(0,c)+a.slice(b.length+c))
    }
    return a;  
    
	/********** End **********/
}


第4关:字符串的分割

任务描述

本关任务:统计英文文献中单词的个数。

相关知识

split()

还记得数组对象的方法join()吗?

字符串的方法split()join()正好相反,split()以指定的字符分割字符串,从而得到一个子字符串数组。

比如字符串a,b,c,d,e,f以逗号为分隔符,就可以得到数组["a","b","c","d","e","f"]

split(a,b)中的参数a是分割符,它的含义是:原来的字符串以该分隔符为边界,分为若干个子字符串(不含该分隔符)。b表示返回的数组的最大长度,不填表示返回所有子字符串组成的数组。

如果要实现分割每一个字符,需要用空字符串""作为分隔符。

 
  1. var str = "012304560789";
  2. var arr1 = str.split("");//返回["0","1","2","3","4","5","6","7","8","9]
  3. var arr1 = str.split("0");//返回["123","456","789"];
  4. var arr2 = str.split("0",2);//返回["123","456"];

后面的学习中我们将看到,a也可以是一个正则表达式,表示以该正则表达式匹配到的字符串为分隔符。

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 参数a是字符串,是一段英文的文本,单词与单词之间要么以,隔开,要么以空格字符(即键盘上的spcae键)隔开;

  • 利用split()方法统计a中单词的个数;

  • 请参考测试样例帮助理解。

测试说明

测试过程:

  • 平台将读取用户补全后的Split.js

  • 调用其中的的mainJs()方法,生成并输入若干组测试数据;

  • 接着根据测试后的输出判断程序是否正确。

以下是测试样例:

测试输入: JS is better than php,every know that 预期输出: 8


 

function mainJs(a) {
	//请在此处编写代码
	/********** Begin **********/
  var spaceArray = a.split(" ");//以space分割
    var commaArray = a.split(",");//以逗号分隔
    return spaceArray.length+commaArray.length-1;
    
	/********** End **********/
}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值