欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript字符串的练习

程序员文章站 2024-03-26 11:45:29
...
所有都定义函数==

1. 传入任意字符串,统计字符串中的大写字母个数、小写字母个数、数字个数、其他字符个数。

------

2. 反转字符串.
   传入:"iOS Android HTML5 Java"
   返回:"avaJ 5LMTH diordnA SOi"

------

3. 去除字符串首尾空格.(写一个自定义的 trim 函数)

------

4. 创建一个长度为5-10, 内容为数字字母下滑线的随机字符串.

------

5. 验证字符串:长度4-16; 只能包含数字、英文字符、下划线三种符号; 首字符不能是数字";

------

6. 将字符中单词用空格隔开
   已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开
    只保留第一个单词的首字母大写

 传入:"HelloMyWorld"

 返回:"Hello my world"

---------------------------------------------------------------

当然,今天用的方法是锻炼思维的,去除正则表达式去写。

1.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--题目:传入任意字符串,统计字符串中的大写字母个数、小写字母个数、数字个数、其他字符个数-->
<script>

    //全局变量
    var lowerNum=0;
    var uperNum=0;
    var number=0;
    var others=0;

    //统计字符串的各个符号的数量函数
    //一个小小的知识点需注意:字符串比较更倾向于转换成数字进行比较,只有两个操作数都是字符串的时候才会进行ASCII码转换进行比较
    function  statistics(str) {
        for(var i=0;i<str.length;i++){
            var char=str.charAt(i);
            if(char >="a" && char <= "z"){
                lowerNum++;
            }else if(char >="A" && char <= "Z"){
                uperNum++;
            }else if(char >= 0 && char <= 9){
                number++;
            }else{
                others++;
            }
        }
    }


    var str=prompt("Please input your string that your want.");
    statistics(str);
    console.log("你输入的字符串为: " + str);
    console.log("小写字母的个数: " + lowerNum);
    console.log("大写字母的个数: " + uperNum);
    console.log("数字类型的个数: " + number);
    console.log("其他符号的个数: " + others);
</script>
</body>
</html>

其实我们不应该用全局变量去搞,我们如果要传出数据,应该优先考虑对象或者数组输出,这样的想法应该培养。

另解:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
// 1. 传入任意字符串,统计字符串中的大写字母个数、小写字母个数、数字个数、其他字符个数。
function counts(s){
    // 大写字母的个数, 小写字母的的个数, 数字的个数, 其他字符的个数
    // var cs = [0, 0, 0, 0];
    var cs = {
        upperCase: 0,
        lowerCase: 0,
        number: 0,
        other: 0
    }
    for (var c of s){
        if (c >= "A" && c <= "Z"){
            // cs[0]++;
            cs.upperCase++;
        }else if (c >= "a" && c <= "z"){
            // cs[1]++;
            cs.lowerCase++;
        }else if (c >= "0" && c <= "9"){
            // cs[2]++;
            cs.number++;
        }else{
            // cs[3]++;
            cs.other++;
        }
    }
    return cs;
}

console.log(counts("fAKJHKHKHKIfjlasdjfoeur93932980?..,,uui]]][[\\"));
</script>
</body>
</html>

2.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--题目:反转字符串.
   传入:"iOS Android HTML5 Java"
   返回:"avaJ 5LMTH diordnA SOi"
-->
<script>
    //反转字符串的函数,先切片成数组,在数组链接字符串
    function reversalString(str) {
        var arr=str.split("");
        var newArr = arr.reverse();
        var getString = newArr.join("");
        return getString;
    }

    // var str="iOS Android HTML5 Java";
    var str=prompt("我们将会把输入的字符串进行反转,很厉害哟~快来试试吧")
    console.log(reversalString(str));

</script>
</body>
</html>

我们可以合并这些API:

<script>
/*2. 反转字符串.
    传入:"iOS Android HTML5 Java"
返回:"avaJ 5LMTH diordnA SOi"*/

function reverse(s){
    return s.split("").reverse().join("");
}

console.log(reverse("abc"));
</script>

3.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<!--题目:去除字符串首尾空格.(写一个自定义的 trim 函数)-->
<body>
<script>
    function selfDefinedTrim(str) {
        var arr = str.split("");
        //头部清空格

        while (arr[0].toString().charCodeAt()==32){
            arr.splice(0,1);
        }

        //尾部清空格
        while (arr[arr.length-1].toString().charCodeAt()==32){
            arr.splice(arr.length-1,1);
        }

        return arr.join("");
    }

    //测试实例
    var str="  u1234 u iu  ";
    console.log(selfDefinedTrim(str));;
</script>
</body>
</html>

另解用for循环,我们字符串的遍历和数组是一样的:

<script>
//3. 去除字符串首尾空格.(写一个自定义的 trim 函数, 不能使用s.trim())
//   "   fljl  jflj    "
function myTrim(s){
    var start, end;
    for (var i = 0; i < s.length; i++){
        if (s[i] != " " && s[i] != "\n" && s[i] != "\t"){
            start = i;
            break;
        }
    }
    for (var i = s.length - 1; i >= 0; i--){
        if (s[i] != " " && s[i] != "\n" && s[i] != "\t"){
            end = i + 1;
            break;
        }
    }
    // return s.substring(start, end);
    return s.slice(start, end);
}

console.log("zzz" + myTrim("   \n \t ldfjlsdjfabc  sdlfjdls\n   \t   ") + "zzz");
</script>

4.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--创建一个长度为5-10, 内容为数字字母下滑线的随机字符串.-->
<script>
    //自定义随机数函数
    function randomNum(m,n) {
        return parseInt(Math.random()*(n-m+1)+m);
    }

    //生成随机字符串的函数
    function randomString() {

        //备选字符数组集
        var arr=["_"];
        for(var i=0;i<=9;i++){
            arr.push(i+"");
        }
        for(var i=97;i<=122;i++){
            arr.push(String.fromCharCode(i));
            arr.push(String.fromCharCode(i-32));
        }

        //生成字符串
        var s="";
        for(var i=0;i<=randomNum(5,10);i++){
            s+=arr[randomNum(0,arr.length-1)];
        }

        return s;
    }

    console.log(randomString());


</script>
</body>
</html>

5.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<!--题目:验证字符串:长度4-16; 只能包含数字、英文字符、下划线三种符号; 首字符不能是数字";-->
<body>
<script>

    var inputString=prompt("input your keywords,and verify: ");
    if(verify(inputString)){
        alert("The password you entered is successful.");
    }else{
        alert("The password you entered failed, please Re-enter.");

    }

    //一个根节点验证函数
    function verify(s) {
        if(s.length < 4 || s.length > 16){
            return false;
        }
        if(include(s)){
            return true;
        }else{
            return false;
        }

    }

    //专门检测字符串中是否只包括数字字母下划线,并且检测是否数字开头,分支验证
    function include(s) {
        if(s[0]>=0 || s[0]<=9){
            return false;
        }
        for(var i=0;i<s.length;i++){
            var temp=s.charCodeAt(i);
            if(temp==95||(temp>=48&&temp<=57)||(temp>=65&&temp<=90)||(temp>=97&&temp<=122)){
            }else{
                return false;
            }
        }
        return true;
    }

</script>
</body>
</html>

另外的写法:

<script>
function validate(s){
    // 先把一些不满足的给排除掉, 可以最大限度的降低嵌套
    // 如果长度小于4或者小于16 直接认为验证没有通过
    if (s.length < 4 || s.length > 16) return false;
    if (s[0] >= "0" && s[0] <= "9") return false;

    for (var c of s){
        if (!((c >= "0" && c <= "9")
                || (c.toLowerCase() >= "a" && c.toLowerCase() <= "z")
                || (c == "_"))){
            return false;
        }
    }
    return true;
}

console.log(validate("abc1你好"));
</script>

6.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--将字符中单词用空格隔开
    已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开
    只保留第一个单词的首字母大写

    传入:"HelloMyWorld"
    返回:"Hello my world"
-->
<script>

    //改变字符串函数(增加空格和该首字母成小写)
    function changeString(str) {
        var arr=str.split("");
        for(var i=1;i<arr.length;i++){
            if(arr[i]>="A" && arr[i]<="Z"){
                arr.splice(i,1," ",arr[i].toString().toLowerCase());
            }
        }
        return arr.join("");
    }

    //测试用例
    var str="HelloMyWorld";
    console.log(changeString(str));

</script>
</body>
</html>

这种写法是有bug的,比如 Hello Hy Horld  就会输出 hello hy world.

另解:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
/*6. 将字符中单词用空格隔开
已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开
只保留第一个单词的首字母大写

 传入:"HelloMyWorld"  // Hello m
 返回:"Hello my world"
*/
function foo(s){
   /* for (var i = 1; i < s.length; i++){
        if (s[i] >= "A" && s[i] <= "Z"){
            s = s.replace(s[i], " " + s[i].toLowerCase());
        }
    }
    return s;*/
    var temp = "";
    var start = 0;  // 每次截取的开始的位置
    for (var i = 1; i < s.length; i++){
        if (s[i] >= "A" && s[i] <= "Z"){  // M
            temp += s.slice(start, i) + " " + s[i].toLowerCase();
            start = i + 1;
        }
    }
    temp += s.slice(start);
    return temp;
}
console.log(foo("HelloHyHorld"));
</script>
</body>
</html>