文章目录
js数组和字符串方法(2)—查找类__常用字符串方法
charAt(index)
概述
charAt() 方法从一个字符串中返回指定的字符。
参数
index
一个介于0 和字符串长度减1之间的整数。 (0~length-1)
如果没有提供索引,charAt() 将使用0。
描述
字符串中的字符从左向右索引,第一个字符的索引值为 0,最后一个字符(假设该字符位于字符串 stringName 中)的索引值为 stringName.length - 1
。 如果指定的 index 值超出了该范围,则返回一个空字符串。
实例及注意事项
var str = 'abcdefg';
console.log(str[1]);
console.log(str.charAt(2));
注意:通过str[index] 这样的方式取值,是有兼容问题的,IE8以下是无法使用的
var str = 'abcdefg';
console.log(str.charAt())
console.log(str.charAt(str.length+2));
console.log(str.charAt(-5));
输出字符串中不同位置的字符
下例输出字符串 “Brave new world
” 不同位置处的字符:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var anyString = "Brave new world";
console.log("The character at index 0 is '" + anyString.charAt(0) + "'");
console.log("The character at index 1 is '" + anyString.charAt(1) + "'");
console.log("The character at index 2 is '" + anyString.charAt(2) + "'");
console.log("The character at index 3 is '" + anyString.charAt(3) + "'");
console.log("The character at index 4 is '" + anyString.charAt(4) + "'");
console.log("The character at index 999 is '" + anyString.charAt(999) + "'");
</script>
</body>
</html>
charCodeAt(index)
charCodeAt()
方法返回0到65535之间的整数,表示给定索引处的UTF-16代码单元 (在 Unicode 编码单元表示一个单一的 UTF-16 编码单元的情况下,UTF-16 编码单元匹配 Unicode 编码单元。但在——例如 Unicode 编码单元 > 0x10000 的这种——不能被一个 UTF-16 编码单元单独表示的情况下,只能匹配 Unicode 代理对的第一个编码单元) 。如果你想要整个代码点的值,使用 codePointAt()
。
简单而言:用于获取当前字符串的unicode编码
const sentence = 'The quick brown fox jumps over the lazy dog.';
const index = 4;
console.log(`The character code ${sentence.charCodeAt(index)} is equal to ${sentence.charAt(index)}`);
// expected output: "The character code 113 is equal to q"
> “The character code 113 is equal to q”
参数
index
: 一个大于等于 0,小于字符串长度的整数。如果不是一个数值,则默认为 0。
返回值
返回值是一表示给定索引处(String中index索引处)字符的 UTF-16 代码单元值的数字;如果索引超出范围,则返回 NaN
。
描述
Unicode 编码单元(code points)的范围从 0 到 1,114,111(0x10FFFF)。开头的 128 个 Unicode 编码单元和 ASCII 字符编码一样。关于 Unicode 的更多信息,可查看 JavaScript Guide。
如果指定的 index 小于 0 或不小于字符串的长度,则 charCodeAt
返回 NaN
。
实例及注意事项
针对字符串比较,实际比较大小是ASCII编码
var str = "kkkkkk";// k - 107
var str2 = "v"; //v - 118
console.log(str > str2);
除此之外还可以比较中文:
实际上如果比较字符串,比较的是Unicode编码的大小
var china1 = "中";
var china2 = "文中";
console.log(china1 > china2);
console.log(china1.charCodeAt());
console.log(china2.charCodeAt());//20013 25991
console.log(china2.charCodeAt(-10));
fromCharCode
静态 String.fromCharCode()
方法返回由指定的UTF-16代码单元序列创建的字符串。
console.log(String.fromCharCode(189, 43, 190, 61));
// expected output: "½+¾="
> “½+¾=”
参数
num1, ..., numN
: 一系列UTF-16代码单元的数字。 范围介于0到65535(0xFFFF)之间。 大于0xFFFF的数字将被截断。 不进行有效性检查。
返回值
一个长度为N的字符串,由N个指定的UTF-16代码单元组成
描述
该方法返回一个字符串,而不是一个 String
对象。
由于 fromCharCode()
是 String
的静态方法,所以应该像这样使用:String.fromCharCode()
,而不是作为你创建的 String
对象的方法
实例及注意事项
var str="我爱你";
var arr = []
for(var i=0;i<str.length;i++){
// console.log(str.charCodeAt(i));
arr[i] = str.charCodeAt(i);
}
console.log(arr);
console.log(String.fromCharCode(arr[0], arr[1], arr[2]));
console.log(String.fromCharCode(arr[1]));
console.log(String.fromCharCode(arr[2]));
indexOf
indexOf()
方法返回调用它的 String
对象中第一次出现的指定值的索引,从 fromIndex
处进行搜索。如果未找到该值,则返回 -1。
const paragraph = 'The quick brown fox jumps over the lazy dog. If the dog barked, was it really lazy?';
const searchTerm = 'dog';
const indexOfFirst = paragraph.indexOf(searchTerm);
console.log(`The index of the first "${searchTerm}" from the beginning is ${indexOfFirst}`);
// expected output: "The index of the first "dog" from the beginning is 40"
console.log(`The index of the 2nd "${searchTerm}" is ${paragraph.indexOf(searchTerm, (indexOfFirst + 1))}`);
// expected output: "The index of the 2nd "dog" is 52"
> “The index of the first “dog” from the beginning is 40”
> “The index of the 2nd “dog” is 52”
语法
str.indexOf(searchValue [, fromIndex])
参数
searchValue
要被查找的字符串值。
如果没有提供确切地提供字符串,searchValue 会被强制设置为 "undefined"
, 然后在当前字符串中查找这个值。
举个例子:'undefined'.indexOf()
将会返回0,因为 undefined
在位置0处被找到,但是 'undefine'.indexOf()
将会返回 -1 ,因为字符串 'undefined'
未被找到。
fromIndex
可选
数字表示开始查找的位置。可以是任意整数,默认值为 0
。
如果 fromIndex
的值小于 0
,或者大于 str.length
,那么查找分别从 0
和str.length
开始。(注: fromIndex
的值小于 0
,等同于为空情况; fromIndex
的值大于 str.length
,那么结果会直接返回 -1
。)
举个例子,'hello world'.indexOf('o', -5)
返回 4
,因为它是从位置0
处开始查找,然后 o
在位置4
处被找到。另一方面,'hello world'.indexOf('o', 11)
(或 fromIndex
填入任何大于11
的值)将会返回 -1
,因为开始查找的位置11
处,已经是这个字符串的结尾了。
返回值
查找的字符串 searchValue
的第一次出现的索引,如果没有找到,则返回 -1
。
若被查找的字符串 searchValue
是一个空字符串,将会产生“奇怪”的结果。如果 fromIndex
值为空,或者 fromIndex
值小于被查找的字符串的长度,返回值和以下的 fromIndex
值一样:
'hello world'.indexOf('') // 返回 0
'hello world'.indexOf('', 0) // 返回 0
'hello world'.indexOf('', 3) // 返回 3
'hello world'.indexOf('', 8) // 返回 8
另外,如果 fromIndex
值大于等于字符串的长度,将会直接返回字符串的长度(str.length
):
'hello world'.indexOf('', 11) // 返回 11
'hello world'.indexOf('', 13) // 返回 11
'hello world'.indexOf('', 22) // 返回 11
从前面一个例子可以看出,被查找的值是空值时,Javascript将直接返回指定的索引值。从后面一个例子可以看出,被查找的值是空值时,Javascript将直接返回字符串的长度。
描述值
字符串中的字符被从左向右索引。第一个字符的索引(index)是 0
,变量名为 stringName
的字符串的最后一个字符的索引是 stringName.length - 1
。
"Blue Whale".indexOf("Blue") // 返回 0
"Blue Whale".indexOf("Blute") // 返回 -1
"Blue Whale".indexOf("Whale", 0) // 返回 5
"Blue Whale".indexOf("Whale", 5) // 返回 5
"Blue Whale".indexOf("", -1) // 返回 0
"Blue Whale".indexOf("", 9) // 返回 9
"Blue Whale".indexOf("", 10) // 返回 10
"Blue Whale".indexOf("", 11) // 返回 10
indexOf
方法是区分大小写的。例如,下面的表达式将返回 -1
:
"Blue Whale".indexOf("blue") // 返回 -1
检测是否存在某字符串
注意 0
并不会被当成 true
,-1
不会被当成 false
。所以当检测某个字符串是否存在于另一个字符串中时,可使用下面的方法:
'Blue Whale'.indexOf('Blue') !== -1 // true
'Blue Whale'.indexOf('Bloe') !== -1 // false
~('Blue Whale'.indexOf('Bloe')) // 0, 这是一种错误用法
实例及注意事项
var str = "aabbccddeeffggabcdefg";
console.log(str.indexOf('b'));
console.log(str.indexOf('ff'));
console.log(str.indexOf('f',14));//19
console.log(str.indexOf('a', -1));
console.log(str.indexOf('k', 50));
使用indexOf()
和 lastIndexOf()
下例使用 indexOf()
和 lastIndexOf()
方法定位字符串中 “Brave new world
” 的值。
var anyString = "Brave new world";
console.log("The index of the first w from the beginning is " + anyString.indexOf("w"));
// logs 8
console.log("The index of the first w from the end is " + anyString.lastIndexOf("w"));
// logs 10
console.log("The index of 'new' from the beginning is " + anyString.indexOf("new"));
// logs 6
console.log("The index of 'new' from the end is " + anyString.lastIndexOf("new"));
// logs 6
indexOf
和区分大小写
下例定义了两个字符串变量。两个变量包含相同的字符串,除了第二个字符串中的某些字符为大写。第一个 log
方法输出 19。但是由于 indexOf
方法区分大小写,因此不会在 myCapString
中发现字符串 “cheddar"
,所以,第二个 log
方法会输出 -1。
var myString = "brie, pepper jack, cheddar";
var myCapString = "Brie, Pepper Jack, Cheddar";
console.log('myString.indexOf("cheddar") is ' + myString.indexOf("cheddar"));
// logs 19
console.log('myCapString.indexOf("cheddar") is ' + myCapString.indexOf("cheddar"));
// logs -1
使用 indexOf
统计一个字符串中某个字母出现的次数
在下例中,设置了 count
来记录字母 e
在字符串 str
中出现的次数:
// 翻译:生存还是毁灭?这是个问题。(莎士比亚《哈姆雷特》)
var str = 'To be, or not to be, that is the question.';
var count = 0;
var pos = str.indexOf('e');
while (pos !== -1) {
count++;
pos = str.indexOf('e', pos + 1);
}
console.log(count); // displays 4
lastIndexOf
lastIndexOf()
方法返回调用String
对象的指定值最后一次出现的索引,在一个字符串中的指定位置 fromIndex
处从后向前搜索。如果没找到这个特定值则返回-1 。
该方法将从尾到头地检索字符串 str,看它是否含有子串 searchValue。开始检索的位置在字符串的 fromIndex 处或字符串的结尾(没有指定 fromIndex 时)。如果找到一个 searchValue,则返回 searchValue 的第一个字符在 str 中的位置。str中的字符位置是从 0 开始的。
语法
str.lastIndexOf(searchValue[, fromIndex])
参数
searchValue
一个字符串,表示被查找的值。如果searchValue
是空字符串,则返回fromIndex
。
fromIndex
待匹配字符串searchValue的开头一位字符从 str的第fromIndex位开始向左回向查找。fromIndex
默认值是 str.length
。如果 fromIndex >= str.length
,则会搜索整个字符串。如果 fromIndex < 0
,则等同于 fromIndex == 0
。
返回值
返回指定值最后一次出现的索引(该索引仍是以从左至右0开始记数的),如果没找到则返回-1。
描述
字符串中的字符被从左向右索引。首字符的索引(index)是 0,最后一个字符的索引是 stringName.length - 1
。
'canal'.lastIndexOf('a'); // returns 3 (没有指明fromIndex则从末尾l处开始反向检索到的第一个a出现在l的后面,即index为3的位置)
'canal'.lastIndexOf('a', 2); // returns 1(指明fromIndex为2则从n处反向向回检索到其后面就是a,即index为1的位置)
'canal'.lastIndexOf('a', 0); // returns -1(指明fromIndex为0则从c处向左回向检索a发现没有,故返回-1)
'canal'.lastIndexOf('x'); // returns -1
'canal'.lastIndexOf('c', -5); // returns 0(指明fromIndex为-5则视同0,从c处向左回向查找发现自己就是,故返回0)
'canal'.lastIndexOf('c', 0); // returns 0(指明fromIndex为0则从c处向左回向查找c发现自己就是,故返回自己的索引0)
'canal'.lastIndexOf(''); // returns 5
'canal'.lastIndexOf('', 2); // returns 2
Note: 'abab'.lastIndexOf('ab', 2)
将返回 2 而不是 0, 因为fromIndex只限制待匹配字符串的开头。
(例如’abadefgabm’.lastIndexOf(‘ab’, 7) 返回7,虽然查找的’ab’中的b已经在 index=8的位置了从index=7的a处向左查找仍是能找到自身a加上其后连成ab,因为fromIndex指的是待匹配字符串的开头那一个)
区分大小写
lastIndexOf
方法区分大小写。例如,下面的表达式返回 -1:
"Blue Whale, Killer Whale".lastIndexOf("blue"); // returns -1
实例及注意事项
var str= "kaichele";
console.log(str.lastIndexOf("k", str.length));
console.log(str.lastIndexOf("k", -50));
console.log(str.lastIndexOf("vv"));
使用 indexOf
和 lastIndexOf
下例使用 indexOf
和 lastIndexOf
方法来定位字符串 “Brave new world
” 中的值。
var anyString = "Brave new world";
console.log("The index of the first w from the beginning is " + anyString.indexOf("w"));
// Displays 8
console.log("The index of the first w from the end is " + anyString.lastIndexOf("w"));
// Displays 10
console.log("The index of 'new' from the beginning is " + anyString.indexOf("new"));
// Displays 6
console.log("The index of 'new' from the end is " + anyString.lastIndexOf("new"));
// Displays 6
(后续待补充)