【问题标题】:Java - removing first character of a stringJava - 删除字符串的第一个字符
【发布时间】:2011-05-29 01:37:33
【问题描述】:

在 Java 中,我有一个字符串:

Jamaica

我想删除字符串的第一个字符,然后返回amaica

我该怎么做?

【问题讨论】:

    标签: java string substring


    【解决方案1】:

    使用带有1 参数的substring() 函数来获取从位置1(第一个字符之后)到字符串末尾的子字符串(保留第二个参数默认为字符串的全长)。

    "Jamaica".substring(1);
    

    【讨论】:

    • 重要的是要注意,这实际上并没有删除字符串中的字符——它为您提供了一个新字符串,其中包含旧字符串的所有字符,除了第一。没有办法实际修改字符串。
    • 链接似乎不再有效。请尝试以下链接:substring(int)
    • 是的,如果你想删除字符串变量的前 n 个字符,你可以这样做:variable = variable.substring(n);
    【解决方案2】:
    public String removeFirstChar(String s){
       return s.substring(1);
    }
    

    【讨论】:

    • 如果你要定义一个新函数,至少要选择一个合适的名字,比如removeFirst()
    【解决方案3】:

    使用substring() 并给出要从前面修剪的字符数。

    String value = "Jamaica";
    value = value.substring(1);
    

    答案:“amaica”

    【讨论】:

      【解决方案4】:

      在Java中,只有当它是某个字符时才删除前导字符

      在移除角色之前,使用 Java 三元运算符快速检查您的角色是否存在。这仅在存在时去除前导字符,如果传递一个空白字符串,则返回空白字符串。

      String header = "";
      header = header.startsWith("#") ? header.substring(1) : header;
      System.out.println(header);
      
      header = "foobar";
      header = header.startsWith("#") ? header.substring(1) : header;
      System.out.println(header);
      
      header = "#moobar";
      header = header.startsWith("#") ? header.substring(1) : header;
      System.out.println(header);
      

      打印:

      blankstring
      foobar
      moobar
      

      Java,删除字符串中任意位置的所有字符实例:

      String a = "Cool";
      a = a.replace("o","");
      //variable 'a' contains the string "Cl"
      

      Java,删除字符串中任意位置的字符的第一个实例:

      String b = "Cool";
      b = b.replaceFirst("o","");
      //variable 'b' contains the string "Col"
      

      【讨论】:

      • 干燥:header = header.substring(header.startsWith("#") ? 1 : 0);
      • 或使用正则表达式:header = header.replaceFirst("^#","");
      【解决方案5】:

      您可以使用String 类的substring 方法,该方法仅采用开始索引并返回以指定索引处的字符开头并延伸到字符串末尾的子字符串。

      String str = "Jamaica";
      str = str.substring(1);
      

      【讨论】:

        【解决方案6】:
        public String removeFirst(String input)
        {
            return input.substring(1);
        }
        

        【讨论】:

          【解决方案7】:

          在 Java 中要理解的关键是字符串是不可变的——您无法更改它们。所以说“从字符串中删除一个字符”是没有意义的。相反,您只需使用您想要的字符创建一个新字符串。此问题中的其他帖子为您提供了多种方法,但重要的是要了解这些不会以任何方式更改原始字符串。您对旧字符串的任何引用都将继续引用旧字符串(除非您将它们更改为引用不同的字符串),并且不会受到新创建的字符串的影响。

          这对性能有很多影响。每次“修改”字符串时,实际上都是在创建一个新字符串,其中隐含了所有开销(内存分配和垃圾收集)。因此,如果您想对字符串进行一系列修改并且只关心最终结果(中间字符串将在您“修改”它们时立即失效),使用 StringBuilder 或 StringBuffer 可能更有意义。

          【讨论】:

            【解决方案8】:

            你可以这样做:

            String str = "Jamaica";
            str = str.substring(1, title.length());
            return str;
            

            或一般来说:

            public String removeFirstChar(String str){
               return str.substring(1, title.length());
            }
            

            【讨论】:

              【解决方案9】:

              substring() 方法返回一个新字符串,其中包含当前包含在此序列中的字符的子序列

              子字符串从指定的start开始并延伸到index end - 1处的字符。

              它有两种形式。第一个是

              1. String substring(int FirstIndex)

              这里,FirstIndex 指定子字符串所在的索引 开始。此表单返回开始于的子字符串的副本 FirstIndex 并运行到调用字符串的末尾。

              1. String substring(int FirstIndex, int endIndex)

              这里FirstIndex指定开始索引,endIndex指定 停止点。返回的字符串包含所有字符 从开始索引到结束索引,但不包括结束索引。

              示例

                 String str = "Amiyo";
                 // prints substring from index 3
                 System.out.println("substring is = " + str.substring(3)); // Output 'yo'
              

              【讨论】:

                【解决方案10】:

                我遇到了一种情况,我不仅要删除第一个字符(如果它是 #,还要删除第一组字符。

                String myString = ###Hello World 可能是起点,但我只想保留Hello World。这可以按以下方式完成。

                while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
                    myString = myString.substring(1, myString.length());
                }
                

                对于 OP 的情况,将 while 替换为 if 也可以。

                【讨论】:

                • 如果 myString == "#" 会出现问题,因为字符串有时会越界。为了防止这种情况,你可以做 (!myString.isEmpty() && myString.charAt(0))
                【解决方案11】:

                另一种解决方案,您可以使用 replaceAll 和一些正则表达式 ^.{1} (regex demo) 来解决您的问题,例如:

                String str = "Jamaica";
                int nbr = 1;
                str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
                

                【讨论】:

                  【解决方案12】:

                  我删除前导字符的版本,一个或多个。例如,String str1 = "01234",当删除前导 '0' 时,结果将是 "1234"。对于 String str2 = "000123" 结果将再次为 "123"。而对于 String str3 = "000" 结果将是空字符串:""。在将数字字符串转换为数字时,此类功能通常很有用。与正则表达式 (replaceAll(...)) 相比,此解决方案的优势在于速度要快得多。这在处理大量字符串时很重要。

                   public static String removeLeadingChar(String str, char ch) {
                      int idx = 0;
                      while ((idx < str.length()) && (str.charAt(idx) == ch))
                          idx++;
                      return str.substring(idx);
                  }
                  

                  【讨论】:

                    【解决方案13】:

                    您可以简单地使用substring()

                    String myString = "Jamaica"
                    String myStringWithoutJ = myString.substring(1)
                    

                    方法中的索引指示我们从哪里获取结果字符串,在这种情况下,我们在第一个位置之后获取它,因为我们不希望“Jamaica”中的“J”。

                    【讨论】:

                      【解决方案14】:

                      ##科特林 #它工作正常。

                      tv.doOnTextChanged { text: CharSequence?, start, count, after ->
                                  val length = text.toString().length
                                  if (length==1 && text!!.startsWith(" ")) {
                                      tv?.setText("")
                                  }
                              }
                      

                      【讨论】:

                        猜你喜欢
                        • 2011-06-24
                        • 1970-01-01
                        • 1970-01-01
                        • 2012-11-27
                        • 2013-07-05
                        • 2015-05-18
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多