JavaScript学习手册九:字符串的常用方法

1、查找字符串的位置

任务描述


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


具体要求如下:

  1. 函数mainJs()有两个字符串参数a和b,其中b比较短;
  2. 要求将b从左到右在a中查找,返回查找的位置之和;
  3. 比如a为ababab,b为ab,b在三个地方与a的子串查找,位置分别是0、2和4,返回他们的和6;

相关知识

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

代码文件

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

}

2、求指定位置的字符

任务描述

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

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

具体要求如下:

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

相关知识

charAt()

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

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

代码文件


【如果用charAt()取字符的话,可以写个循环,取前六个字符然后拼接在一起,如第一种方法,第二种方法是下一关的方法】


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

3、字符串的截取

任务描述

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

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

具体要求如下:

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

相关知识


------字符串的截取是指获得原来字符串连续的一部分。这种操作很常见,比如现在各大互联网企业的招聘官网上,应聘者在填入身份证号码后,页面会自动截取中间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

代码文件

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、大小写转换

任务描述


本关任务:对指定位置的子字符串进行大小写转换。


具体要求如下:

  • 已知参数a和b都是字符串,a比b长;
  • 要求找到a中所有与b匹配的子字符串,将这些子字符串全部转化为大写,a的其它部分不变,返回转化完成后的a;

相关知识

toLowerCase()


toLowerCase()把字符串中的所有大写英文字母转为小写,返回转换后的字符串,但是操作该函数的字符串不变。


var upperStr = "aBCd";
var lowerStr = upperStr.toLowerCase();
console.log(upperStr);//输出aBCd
console.log(lowerStr);//输出abcd

toUpperCase()

与上面的函数相反,toUpperCase()把字符串中的所有小写英文字母转为大写,返回转换后的字符串,但是操作该函数的字符串不变。

var str = "asdf";
var strin = str.toUpperCase();
console.log(str);//输出asdf
console.log(strin);//输出ASDF

代码文件

【RegExp是后面要学习的】

function mainJs(a,b) {
	//请在此处编写代码
	/********** Begin **********/
    var string = b.toUpperCase();
    for(var i=0;i<a.length;i++){
        str = a.replace(new RegExp(b,"g"),string);
        //"g"表示可以进行全局匹配
      //str = a.replace(new RegExp(b,"m"),string);
        //"m"表示可以进行多行匹配
    }
    return str;
	/********** End **********/
}

5、字符串的分割

任务描述

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

具体要求如下:

  • 参数a是字符串,是一段英文的文本,单词与单词之间要么以,隔开,要么以空格字符(即键盘上的spcae键)隔开;
  • 利用split()方法统计a中单词的个数;

相关知识

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也可以是一个正则表达式,表示以该正则表达式匹配到的字符串为分隔符。

代码文件

function mainJs(a) {
	//请在此处编写代码
	/********** Begin **********/
    return a.split(" ").length+a.split(",").length-1;
	/********** End **********/
}
  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年游四方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值