JavaScript字符串的练习

所有都定义函数==

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>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值