方法一
将字符串转换为数组,循环该数组,另外定义一个数组用来存放多次出现的字符。用 indexOf 判断当前字符在后续子字符串中是否存在,不存在则返回该字符,在后续子字符串中存在但是第一次出现则存入另一个数组中。
function findChar(str) {
let strArr = str.split("");
let arr = [];
for (let i = 0; i < strArr.length; i++) {
let isExist = false;
for (let j = 0; j < arr.length; j++) {
if (arr[j] === strArr[i]) {
isExist = true;
}
}
let subStr = str.substring(i + 1);
let index = subStr.indexOf(strArr[i]);
if (index < 0 && !isExist) {
return strArr[i];
} else if (!isExist) {
arr.push(strArr[i]);
}
}
return "所有字符都出现了多次";
}
方法二
同样先将字符串转换为数组,循环该数组,并用正则表达式匹配该字符在字符串中出现的次数,为1次则返回该字符。
function findChar(str) {
let strArr = str.split("");
let arr = [];
for (let i = 0; i < strArr.length; i++) {
let reg = new RegExp(strArr[i], 'g');
let matchArr = str.match(reg);
if(matchArr.length === 1) {
return strArr[i];
}
}
return "所有字符都出现了多次";
}
测试用例
let str1 = "23128789134132";
let str2 = "aaabbbcccdddd";
let str3 = "abcabcabc";
console.log("%cchar:" + findChar(str1), "color: red");
console.log("%cchar:" + findChar(str2), "color: red");
console.log("%cchar:" + findChar(str3), "color: red");
测试结果