第1关:查找字符串的位置
任务描述
本关任务:调用JavaScript
内置的函数实现字符串的查找。
相关知识
indexOf()
子字符串指一个字符串中连续的一部分。
上图中有两个字符串aaabc
和abc
,将abc
从左往右在aaabc
中查找,第一次出现的位置是在aaabc
的索引2
处。
indexOf()
就是返回某个字符串在字符串中首次出现的位置。如果搜索到尾部还没有找到,返回-1
。
indexOf(a,b)
中参数a
是字符串;b
是开始查找的位置,即从调用者(一个字符串)的第几个位置开始查找,可选。
var short = "ab";
var long = "aabccccaab";
var mix = "cdef";
long.indexOf(short);//返回1
long.indexOf(short,4);//返回8
long.indexOf(mix);//返回-1
可以看到第4
行与第5
行的结果不同,因为第5
行是从long
的第5
个字符开始查找的。
lastIndexOf()
从名字上就可以知道,这个函数与indexOf()
功能很相似,区别是搜素方向是从后往前搜索。
lastIndexOf()
也有两个参数,含义同indexOf()
。
var short = "ab";
var long = "aabccccaab";
var mix = "cdef";
long.lastIndexOf(short);//返回8
long.lastIndexOf(short,4);//返回1
long.lastIndexOf(mix);//返回-1
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下:
-
函数
mainJs()
有两个字符串参数a
和b
,其中b
比较短; -
要求将
b
从左到右在a
中查找,返回查找的位置之和; -
比如
a
为ababab
,b
为ab
,b
在三个地方与a
的子串查找,位置分别是0
、2
和4
,返回他们的和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
计数:
var str = "abcdefg";
console.log(str.charAt(0));//输出a
console.log(str.charAt(str.length-1));//输出g
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下:
-
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
测定的时候,不小心往碱基对序列中(由A
、T
、G
、C
、U
组成的序列)插入了无关的字符串,他想请你帮忙,删掉这些无关的字符串。
本关任务:利用字符串的截取功能实现剔除无关字符串。
相关知识
字符串的截取是指获得原来字符串连续的一部分。这种操作很常见,比如现在各大互联网企业的招聘官网上,应聘者在填入身份证号码后,页面会自动截取中间6
位生成出生日期,这是一种提高页面体验的方式。
slice()
slice(a,b)
的作用是截取a
位置(含)到b
位置(不含)之间的字符串,被截取的字符串不变,返回截取后获得的子字符串。比如a
是0
,b
是3
,则截取0、1、2
三个位置的字符。
b
为可选参数,不填则表示截取到字符串的尾部。a
或b
为负数时表示从右往左排,即-1
表示最右侧的位置,依次类推。
var str = "0123456789";
console.log(str.slice(0,4));//输出0123
console.log(str.slice(3));//输出3456789
console.log(str.slice(-3));//输出789
console.log(str.slice(-5,-2));//输出567
substring()
substring(a,b)
与slice(a,b)
功能相同,参数的意义也相同:a
和b
都是表示位置的数字。只是参数的处理有些不同:
-
a
或b
为负数时,自动转换为0
; -
a
大于b
时,编译器会自动对调两者。
var str = "0123456789";
console.log(str.substring(0,4));//输出0123
console.log(str.substring(-1,4));//输出0123
console.log(str.substring(4,0));//输出0123
substr()
与上面的两个函数不同,substr(a,b)
指定开始位置和要截取的长度。
a
表示开始位置(包含);b
表示截取的长度,可选。不填则截取到字符串结尾处;
a
为负数时表示从右往左排,即-1
表示最右侧的位置,依次类推。
var myStr = "0123456789";
console.log(myStr.substr(3));//输出3456789
console.log(myStr.substr(3,2));//输出34
console.log(myStr.substr(-2));//输出89
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下:
-
参数
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
表示返回的数组的最大长度,不填表示返回所有子字符串组成的数组。
如果要实现分割每一个字符,需要用空字符串""
作为分隔符。
var str = "012304560789";
var arr1 = str.split("");//返回["0","1","2","3","4","5","6","7","8","9]
var arr1 = str.split("0");//返回["123","456","789"];
var arr2 = str.split("0",2);//返回["123","456"];
后面的学习中我们将看到,a
也可以是一个正则表达式,表示以该正则表达式匹配到的字符串为分隔符。
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下:
-
参数
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 **********/
}