将字符串中含有数字部分内容反转,并且不能使用例如.join()等内置对象

将字符串中含有数字部分内容反转,并且不能使用例如.join()等内置对象

例:var str= ‘qwerty 1sadfe qrqewb2 asdfgh abcdefg ads8fgh’;将该字符传化为‘ qwerty efdas1 2bweqrq asdfgh abcdefg hgf8sda’,不能使用内置对象

当我看到这个需求的时候我第一想到就是想把字符串转化成数组,在利用正则来判断数组中的元素是否有数字,有的话就遍历当前的数组元素,然后再这个数组,显然这已经超出这个题目的需求,那么该怎么查找到字符串中含有数字的部分并将其反转呢?


一起想想思路

  1. 第一步:先遍历整个字符串,遍历每一个字符,判断字符串是否为空,如果不是空,利用临时变量将字符串进行拼接遍历项;
  2. 第二步:设置一个标识,用于标记含有数字的临时变量,当字符串为空的时候,遍历临时变量看是否有数字,有数字就改变标识符的状态;
  3. 第三部:判断标识符的状态,反向遍历含有数字的临时变量,将其内容反转,最后将临时变量拼接到一起;

代码例下:

<script>
  var str = 'qwerty 1sadfe qrqewb2 asdfgh abcdefg ads8fgh';
  var newStr ='';  //临时变量
  var temp = '';   //临时变量
  var result = '';
  for(var i = 0 ; i < str.length; i++){
    var bool = false;     //标识,用于判断存储的临时变量是否有数字
    if(str[i] !== ' ' ){
        newStr = newStr + str[i];
        console.log(newStr)
    }else {
        for(var j= 0; j < newStr.length; j++){ //遍历遍历的每一项,利用newStr[j]-0判断是否有数字 ,没有数字就跳出循环
            if(newStr[j]-0 >= 0){
                bool = true;
                break;
            }
        }
        if(bool){  //说明是含有数字的变量
            for(var k= newStr.length-1; k >=0; k--){
                temp = temp + newStr[k];
            }
            result =result + ' ' + temp;
            temp=''
        }else {
            result = result + ' ' + newStr
        }
        newStr = ''
    }
  }
  console.log(result)

</script>

注意仔细看打印的结果!有没有发现结果少了最后一个空格后的字符,这是为什么呢?

原因:在判断是否为空的时候最后一个字符后面没有空格,这时就没有将最后一个空格的字符进行拼接;

解决方法一:在判断字符串是否为空的时候,同时也判断是否是最后一项,当i的索引不等于字符最后一项的索引就让其拼接;

<script>
 ·······//同上省略
  for(var i = 0 ; i < str.length; i++){
    var bool = false;     //标识,用于判断存储的临时变量是否有数字
    if(str[i] !== ' ' && i !== str.length-1){   //在这里添加i索引的判断,判断否是最后一项
        newStr = newStr + str[i];
        console.log(newStr)
    }else {
        if(i === str.length-1){  
            newStr += str[i]
        }
       //后面同上省略不写

</script>

解决方法二:给字符串最后一项后面添加空格!(ps:偷懒的办法~_~)。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值