【问题标题】:Delete first character of a string in Javascript在Javascript中删除字符串的第一个字符
【发布时间】:2011-06-01 15:41:59
【问题描述】:

如果第一个字符是 0,我想删除字符串的第一个字符。0 可以多次出现。

有没有简单的函数检查第一个字符,如果是0就删除它?

现在,我正在尝试使用 JS slice() 函数,但它非常尴尬。

【问题讨论】:

    标签: javascript string


    【解决方案1】:

    一个简单的解决方案是使用splice()方法,并将1作为参数传递

    let str = "khattak01"
    let resStr = str.slice(1)
    console.log(resStr)

    结果:hattak01

    【讨论】:

      【解决方案2】:
      const string = '0My string';
      const result = string.substring(1);
      console.log(result);
      

      您可以使用 substring() javascript 函数。

      【讨论】:

        【解决方案3】:

        使用.charAt().slice()

        示例: http://jsfiddle.net/kCpNQ/

        var myString = "0String";
        
        if( myString.charAt( 0 ) === '0' )
            myString = myString.slice( 1 );
        

        如果开头可能有多个0 字符,您可以将if() 更改为while()

        示例: http://jsfiddle.net/kCpNQ/1/

        var myString = "0000String";
        
        while( myString.charAt( 0 ) === '0' )
            myString = myString.slice( 1 );
        

        【讨论】:

          【解决方案4】:

          非常易读的代码是使用.substring(),并将开始设置为第二个字符的索引 (1)(第一个字符的索引为 0)。 .substring()方法的第二个参数其实是可选的,所以你甚至不需要调用.length()...

          TL;DR : 从字符串中删除第一个字符:

          str = str.substring(1);
          

          ...是的,就是这么简单...

          删除某些特定字符:

          正如@Shaded 建议的那样,当你的字符串的第一个字符是“不需要的”字符时,只需循环这个......

          var yourString = "0000test";
          var unwantedCharacter = "0";
          //there is really no need for === check, since we use String's charAt()
          while( yourString.charAt(0) == unwantedCharacter ) yourString = yourString.substring(1);
          //yourString now contains "test"
          

          .slice() vs .substring() vs .substr()

          编辑: substr() 没有标准化,不应该用于新的 JS 代码,由于与其他语言的命名相似,您可能倾向于使用它,例如PHP,但即使在 PHP 中,您也应该使用 mb_substr() 以确保在现代世界中的安全:)

          引用自What is the difference between String.slice and String.substring?(以及更多内容)What is the difference between String.slice and String.substring?

          他还指出,如果要切片的参数是负数,它们 从末尾引用字符串。子字符串和子字符串没有。

          【讨论】:

            【解决方案5】:

            您可以使用substring 删除字符串的第一个字符:

            var s1 = "foobar";
            var s2 = s1.substring(1);
            alert(s2); // shows "oobar"
            

            删除字符串开头的所有 0:

            var s = "0000test";
            while(s.charAt(0) === '0')
            {
             s = s.substring(1);
            }
            

            【讨论】:

            • @Stephen:在这种情况下,它不会有任何区别,因为charAt 总是返回一个字符串,即使索引超过了最后一个字符的索引,所以没有执行类型强制,算法最终是相同的。但我确实更喜欢=== 而不是==,即使它没有任何区别。 ;)
            • @Hejner:如果类型相同,在这种情况下它们总是如此,那么===== 执行完全相同的步骤(至少根据规范),所以没有理由期望一个比另一个表现更好。
            • @MiguelCoder。根据规范,步骤是相同的​​(当然,浏览器实现可能不同)。如果您不相信我,请阅读它。
            • @ReallyNiceCode 撇开这个问题是在 8 年前提出的事实。据说“0 可以不止一次出现”。提问者接受了我的解决方案。
            • 虽然仍然有效,但您应该更新您的回复,将substr 替换为substring。查看 MDN:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
            【解决方案6】:

            删除后获取第一个字符的另一种方法:

            // Example string
            let string = 'Example';
            
            // Getting the first character and updtated string
            [character, string] = [string[0], string.substr(1)];
            
            console.log(character);
            // 'E'
            
            console.log(string);
            // 'xample'
            
            

            【讨论】:

              【解决方案7】:

              String.prototype.trimStartWhile = function(predicate) {
                  if (typeof predicate !== "function") {
                  	return this;
                  }
                  let len = this.length;
                  if (len === 0) {
                      return this;
                  }
                  let s = this, i = 0;
                  while (i < len && predicate(s[i])) {
                  	i++;
                  }
                  return s.substr(i)
              }
              
              let str = "0000000000ABC",
                  r = str.trimStartWhile(c => c === '0');
                  
              console.log(r);

              【讨论】:

                【解决方案8】:

                你可以用substring方法做到这一点:

                let a = "My test string";
                
                a = a.substring(1);
                
                console.log(a); // y test string
                

                【讨论】:

                  【解决方案9】:

                  试试

                  s.replace(/^0/,'')
                  

                  console.log("0string  =>", "0string".replace(/^0/,'') );
                  console.log("00string =>", "00string".replace(/^0/,'') );
                  console.log("string00 =>", "string00".replace(/^0/,'') );

                  【讨论】:

                    【解决方案10】:
                    //---- remove first and last char of str    
                    str = str.substring(1,((keyw.length)-1));
                    
                    //---- remove only first char    
                    str = str.substring(1,(keyw.length));
                    
                    //---- remove only last char    
                    str = str.substring(0,(keyw.length));
                    

                    【讨论】:

                      【解决方案11】:

                      来自 trim() 的 Javascript 实现 > 从字符串中删除和前导或结束空格。这是此问题答案的更改实现。

                      var str = "0000one two three0000"; //TEST  
                      str = str.replace(/^\s+|\s+$/g,'0'); //ANSWER
                      

                      在 JS 上的原始实现

                      string.trim():
                      if (!String.prototype.trim) {
                       String.prototype.trim = function() {
                        return this.replace(/^\s+|\s+$/g,'');
                       }
                      }
                      

                      【讨论】:

                      • 我们不认为混淆是实现问题,但是,它通常归因于跟上环境呈现给您的变量的能力不足。在这种情况下,您的神经连接无法处理对这种改变采用原生 js 函数实现的必要理解作为对原始问题的回答。
                      【解决方案12】:

                      去除所有前导0s 的最简单方法是:

                      var s = "00test";
                      s = s.replace(/^0+/, "");
                      

                      如果只是剥离一个前导 0 字符,正如问题所暗示的那样,您可以使用

                      s = s.replace(/^0/, "");
                      

                      【讨论】:

                        【解决方案13】:

                        你试过substring函数吗?

                        string = string.indexOf(0) == '0' ? string.substring(1) : string;
                        

                        这是一个参考 - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/substring

                        而且你总是可以对多个 0 执行此操作:

                        while(string.indexOf(0) == '0')
                        {
                            string = string.substring(1);
                        }
                        

                        【讨论】:

                          【解决方案14】:

                          这是一个不假设输入是string,使用substring,并带有几个单元测试:

                          var cutOutZero = function(value) {
                              if (value.length && value.length > 0 && value[0] === '0') {
                                  return value.substring(1);
                              }
                          
                              return value;
                          };
                          

                          http://jsfiddle.net/TRU66/1/

                          【讨论】:

                            【解决方案15】:
                            var test = '0test';
                            test = test.replace(/0(.*)/, '$1');
                            

                            【讨论】:

                            • 这并没有达到预期的效果,而且效率也很低。
                            【解决方案16】:
                            var s = "0test";
                            if(s.substr(0,1) == "0") {
                                s = s.substr(1);
                            }
                            

                            对于所有0s:http://jsfiddle.net/An4MY/

                            String.prototype.ltrim0 = function() {
                             return this.replace(/^[0]+/,"");
                            }
                            var s = "0000test".ltrim0();
                            

                            【讨论】:

                            • 是的,如果字符串中只有一个 0,这将起作用。但是如果字符串看起来像 var s = "00test0"; 我也需要它。那么只有前两个 0 必须被替换
                            • 为什么不charAt?为什么是括号?为什么要原型扩展?糟糕。
                            猜你喜欢
                            • 2011-06-24
                            • 1970-01-01
                            • 2019-10-21
                            • 2011-05-29
                            • 1970-01-01
                            • 1970-01-01
                            • 2018-07-08
                            • 2017-01-28
                            相关资源
                            最近更新 更多