字符串及字符串方法
字符串
字符串概述
字符串也,是一个数据结构,将同样的内容传在一块。因为在对应的js里面字符串属于一个值类型(值类型是常量 常量不会变)字符串是不能改变的。字符串也是一个存储结构,作为存储结构增删改查的方法(字符串的增删改查不能针对于本身 而是返回一个新的字符串)
字符串的声明
1.值类型赋值
var str='abc'
2.以new关键词声明(引用对应值的地址)
var str = new String('abc') //type
3.es6新增 字符串模板
var a ='jack'
var str = `hello string ${a}` //esc下面的键 解析${}以变量来解析
console.log(str) // hello string jack
new String()和String()区别
- new String是构建一个String对象(引用数据类型 有地址指向的)
- String单纯的将对应的传进入的参数转为string(值类型)
字符串属性
length属性 返回字符串的长度(包含空格及换行)
var str = 'a b'
console.log(str.length) //3
通过下标来获取对应的字符串
var str='abc'
console.log(str[0]) //a
字符串的方法(返回新的字符串)
通过下标找字符串(char字符)
charAt(下标)
var str='abc'
var char=str.charAt(0)
console.log(char) //a
charCodeAt(ASCII码)
var str='abc'
var char=str.charCodeAt(0)
console.log(char) //97
通过字符串找下标(找不到返回-1,找到返回对应的下标值 number)
indexOf
var str='abc'
console.log(str.indexOf('ab')) // 返回下标0
console.log(str.indexOf('d')) // -1
var str1='aaaccecf'
console.log(str.indexOf('a,2')) //2
//可以有两个参数 第一个参数:需要查询的字符串 第二个参数:开始查找的下标(省略默认为0)
lastIndexOf(从后往前找)
var str1='aaaccecf'
console.log(str.lastIndexOf('a,2')) //2
//可以有两个参数 第一个参数:需要查询的字符串 第二个参数:开始查找的下标(省略默认为str.length-1)
自定义函数实现对应的indexOf方法及对应的lastIndexOf方法
//实现indexOf方法
var searchStr = 'abcdefabcde'
function indexOf(str, index) {
if (!index) { //当前如果是undefined的值
index = 0 //默认为0
}
var len = str.length
for (var i = index; i < searchStr.length - len; i++) {
var s = ''
for (var j = 0; j < len; j++) {
s += searchStr[i + j]
}
if (s == str) {
return i
}
}
reture - 1
}
console.log(indexOf('bc', 4))
//实现lastIndexOf方法
function lastIndexOf(str, index) {
if (!index && index != 0) { //当前如果是undefined的值 或者不为0
index = searchStr.length - 1 //默认为最后一个
}
//得到str的长度
var len = str.length
//这个5是表示当前的字符串的总长度
for (var i = index; i >= len; i--) {
var s =
''
for (var j = len - 1; j >= 0; j--) {
s += searchStr[i - j]
}
if (s == str) {
return i
}
}
return -1
}
search方法(和indexOf一样 支持正则表达式)
var str='abc'
console.log(str.search(/ab/,0)) //0 /ab/为正则表达式
静态方法(通过构造方法名直接调用的叫静态方法 他是对应的static修饰的)
fromCharCode 将对应的ASCII码转为字符串
var str =String.fromCharCode(97)
console.log(str) //a
concat将多个字符串转为连接成一个字符串返回
var str ='hello'.concat('world')
console.log(str) //hello world
支持正则的方法
search 查找
**replace **替换(找到第一个需要替换的替换)
var str ='abca'
var str1=str.replace('a',hello)
console.log(str1) // hellobca
//找到第一个a替换hello
**split **分割(成为一个数组,与join相反(数组变成字符串))
//分割 成为一个数组 split 数组变成字符串 join (默认以,)
var str = '1,2,3'
//默认不是以,作为分割 默认不分割 直接填入到数组
console.log(str.split()); //['1,2,3']
console.log(str.split(',')); //['1','2','3']
**match **匹配(返回数组)
//match 返回一个数组 (匹配的内容)
var str ="abcacc"
//默认只找第一个匹配的 加入到数组
var arr = str.match('a')
console.log(arr); //a
截取的方法
substring截取
var str='abcdef'
console.log(str.substring(1)) //bcdef
console.log(str.substring(1,3)) //bc //截取不包含最后一个下标 (默认不填str.length)bc
substr截取
// substr(开始的下标,截取的个数)
console.log(str.substr(1));//默认的情况是截取到最后 bcdef
console.log(str.substr(1,3));//从下标1开始截取 截取个数为3个 bcd
转大写(toUpperCase)
var str='abcD'
console.log(str.toUpperCase()) //ABCD
转小写(toLowerCase)
var str='abcD'
console.log(str.toLowerCase()) //abcd
var str='abcA'
toLocaleUpperCase()本地转换
Math类(数学类 一起和数学计算相关的方法都在这个里面而且这个里面的方法都是静态的)
属性
PI 3.1415926
E 科学计算法
方法
random 随机数
round 四舍五入
floor 向下取整
ceil 向上取整
pow 取幂次方
sqrt 开平方
abs 取绝对值
max 最大值
min 最小值
总结
- string是不能改变的(常量)
- string的方法返回的都是一个新的字符串
- string的length属性是只读的(不能赋值)读取对应的字符串的长度
- 字符串可以通过下标进行访问(string[i])
- 字符串方法 charAt charCodeAt
- 搜索 indexOf lastIndexOf search
- 支持正则的方法 search replace split match
- 截取的方法 substring substr
- 转大写和小写 toUpperCase和 toLowerCase
- 静态方法 fromCharCode 根据ascii转为字符串
经典字符串题目
回文串字符(1.最优:马拉车算法(贪心算法);2.dp动态规划 dp数组)
字符串最长重复(hash对比)