【问题标题】:How to remove the last character from a string?如何从字符串中删除最后一个字符?
【发布时间】:2011-11-18 07:28:49
【问题描述】:

我想从字符串中删除最后一个字符。我试过这样做:

public String method(String str) {
    if (str.charAt(str.length()-1)=='x'){
        str = str.replace(str.substring(str.length()-1), "");
        return str;
    } else{
        return str;
    }
}

获取字符串的长度 - 1 并将最后一个字母替换为空(删除它),但是每次我运行程序时,它都会删除与最后一个字母相同的中间字母。

例如,单词是“admirer”;运行该方法后,我得到“admie”。我希望它返回佩服这个词。

【问题讨论】:

    标签: java string


    【解决方案1】:

    replace 将替换一个字母的所有实例。您需要做的就是使用substring():

    public String method(String str) {
        if (str != null && str.length() > 0 && str.charAt(str.length() - 1) == 'x') {
            str = str.substring(0, str.length() - 1);
        }
        return str;
    }
    

    【讨论】:

    • 我会在检查的开头添加null != str &&
    • 你的意思是str != null &&
    • @SSpoke 是一样的,你的只是更好读一点:)
    • @Marko 哈哈是的,因为这是标准,当人们自己制作东西时感觉很奇怪。
    • @AdamJensen 在 C 中你可能会不小心写出if (str = NULL),它不仅总是会计算为假(NULL == 0 == false),还会给str 赋值,这很可能不是你想做的。但是,您不能写 if (NULL = str),因为 NULL 不是变量,不能分配给它。因此,将 NULL 放在左侧是一个更安全的约定。不过这在 Java 中不是问题。
    【解决方案2】:
    public String removeLastChar(String s) {
        if (s == null || s.length() == 0) {
            return s;
        }
        return s.substring(0, s.length()-1);
    }
    

    【讨论】:

    • 如果最后一个字符是高/低代理对怎么办?
    • @RobertAllanHenniganLeahy 我发布了一个处理这种情况的answer
    【解决方案3】:

    为什么不只有一个班轮?

    public static String removeLastChar(String str) {
        return removeLastChars(str, 1);
    }
    
    public static String removeLastChars(String str, int chars) {
        return str.substring(0, str.length() - chars);
    }
    

    完整代码

    public class Main {
        public static void main (String[] args) throws java.lang.Exception {
            String s1 = "Remove Last CharacterY";
            String s2 = "Remove Last Character2";
            System.out.println("After removing s1==" + removeLastChar(s1) + "==");
            System.out.println("After removing s2==" + removeLastChar(s2) + "==");
        }
        
        public static String removeLastChar(String str) {
            return removeLastChars(str, 1);
        }
    
        public static String removeLastChars(String str, int chars) {
            return str.substring(0, str.length() - chars);
        }
    }
    

    Demo

    【讨论】:

    • 应该考虑检查null和空字符串。@BobBobBob版本更好
    • @KDjava :考虑到传递了有效的字符串,以上是有效的。否则我还必须添加 try catch 块来检查字符串是否正确...
    • 我在return str.substring(0,str.length()-1); 之前添加了对空字符串的检查作为改进
    • @FahimParkar:因为最后一个字符可能不是我们要删除的字符。但是根据问题,您的答案是正确的
    【解决方案4】:

    所描述的问题和建议的解决方案有时与移除分隔符有关。如果这是你的情况,那么看看 Apache Commons StringUtils,它有一个名为 removeEnd 的方法,非常优雅。

    例子:

    StringUtils.removeEnd("string 1|string 2|string 3|", "|");
    

    会导致: "字符串 1|字符串 2|字符串 3"

    【讨论】:

    【解决方案5】:
    if (str.endsWith("x")) {
      return str.substring(0, str.length() - 1);
    }
    return str;
    

    例如,单词是“admirer”;运行该方法后,我得到“admie”。我希望它返回佩服这个词。

    如果你想stem英文单词

    词干提取是将变形(或有时派生)的词简化为词干、基本或词根形式(通常是书面词形式)的过程。

    ...

    例如,英语词干分析器应根据词根“cat”和“stemmer”、“stemming”、“”识别字符串“cats”(可能还有“catlike”、“catty”等)以“词干”为基础。词干提取算法将单词“fishing”、“fished”、“fish”和“fisher”简化为词根“fish”。

    Difference between Lucene stemmers: EnglishStemmer, PorterStemmer, LovinsStemmer 概述了一些 Java 选项。

    【讨论】:

      【解决方案6】:

      既然我们在讨论一个主题,我们也可以使用正则表达式

      "aaabcd".replaceFirst(".$",""); //=> aaabc  
      

      【讨论】:

      • 好方法,当您想要/需要准确定义要从字符串末尾修剪的内容时,而不仅仅是 X 任何字符
      【解决方案7】:

      使用这个:

       if(string.endsWith("x")) {
      
          string= string.substring(0, string.length() - 1);
       }
      

      【讨论】:

        【解决方案8】:

        不要试图重新发明轮子,而其他人已经编写了库来执行字符串操作: org.apache.commons.lang3.StringUtils.chop()

        【讨论】:

        • 如果您只想删除最后一个字符 - 这是最好的答案!
        • 不,不是,因为“使用 Java”是对 Kotlin 问题的糟糕回答。
        • @MikkelLøkke 我不知道,但这个问题无论如何都不是 Kotlin 问题??
        【解决方案9】:
        public String removeLastChar(String s) {
            if (!Util.isEmpty(s)) {
                s = s.substring(0, s.length()-1);
            }
            return s;
        }
        

        【讨论】:

          【解决方案10】:

          删除最后出现的“xxx”:

              System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", "$1"));
          

          如果是最后一次,则删除最后一次出现的“xxx”:

              System.out.println("aaa xxx aaa  ".replaceAll("xxx\\s*$", ""));
          

          您可以根据需要替换“xxx”,但要注意特殊字符

          【讨论】:

            【解决方案11】:

            一个简单的答案(只是一个有趣的选择 - 不要在家里尝试这个,并且已经给出了很好的答案):

            public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}
            

            【讨论】:

              【解决方案12】:
              // Remove n last characters  
              // System.out.println(removeLast("Hello!!!333",3));
              
              public String removeLast(String mes, int n) {
                  return mes != null && !mes.isEmpty() && mes.length()>n
                       ? mes.substring(0, mes.length()-n): mes;
              }
              
              // Leave substring before character/string  
              // System.out.println(leaveBeforeChar("Hello!!!123", "1"));
              
              public String leaveBeforeChar(String mes, String last) {
                  return mes != null && !mes.isEmpty() && mes.lastIndexOf(last)!=-1
                       ? mes.substring(0, mes.lastIndexOf(last)): mes;
              }
              

              【讨论】:

                【解决方案13】:

                查看 StringBuilder 类:

                    StringBuilder sb=new StringBuilder("toto,");
                    System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"
                

                【讨论】:

                  【解决方案14】:

                  如果您有特殊字符,例如 ;在 json 中只需使用 String.replace(";", "") 否则您必须重写字符串中的所有字符减去最后一个。

                  【讨论】:

                    【解决方案15】:
                     string = string.substring(0, (string.length() - 1));
                    

                    我在我的代码中使用它,它很简单。 它仅在 String > 0 时有效。 我将它连接到一个按钮并在以下 if 语句中

                    if (string.length() > 0) {
                        string = string.substring(0, (string.length() - 1));
                    }
                    

                    【讨论】:

                      【解决方案16】:

                      这是删除字符串中最后一个字符的一种方法:

                      Scanner in = new Scanner(System.in);
                      String s = in.nextLine();
                      char array[] = s.toCharArray();
                      int l = array.length;
                      for (int i = 0; i < l-1; i++) {
                          System.out.print(array[i]);
                      }
                      

                      【讨论】:

                        【解决方案17】:

                        为什么不使用escape sequence ...!

                        System.out.println(str + '\b');
                        

                        现在生活轻松多了。 XD! ~ 一个可读的单行

                        【讨论】:

                        【解决方案18】:

                        就可读性而言,我觉得这是最简洁的

                        StringUtils.substring("string", 0, -1);
                        

                        负索引可用于 Apache 的 StringUtils 实用程序。 所有负数都从字符串末尾的偏移量开始处理。

                        【讨论】:

                        • 我不会说这是最好的答案 - 为简单起见,请使用 org.apache.commons.lang.StringUtils.chop() 方法。然而,使用 -1 的技巧非常好,并且查看其他答案并没有真正使用/众所周知。
                        【解决方案19】:

                        我不得不为类似的问题编写代码。我能够解决它的一种方法是使用递归编码方法。

                        static String removeChar(String word, char charToRemove)
                        {
                            for(int i = 0; i < word.lenght(); i++)
                            {
                                if(word.charAt(i) == charToRemove)
                                {
                                    String newWord = word.substring(0, i) + word.substring(i + 1);
                                    return removeChar(newWord, charToRemove);
                                }
                            }
                        
                            return word;
                        }
                        

                        我在这个主题上看到的大多数代码都没有使用递归,所以希望我可以帮助你或遇到同样问题的人。

                        【讨论】:

                          【解决方案20】:

                          Java 8

                          import java.util.Optional;
                          
                          public class Test
                          {
                            public static void main(String[] args) throws InterruptedException
                            {
                              System.out.println(removeLastChar("test-abc"));
                            }
                          
                            public static String removeLastChar(String s) {
                              return Optional.ofNullable(s)
                                .filter(str -> str.length() != 0)
                                .map(str -> str.substring(0, str.length() - 1))
                                .orElse(s);
                              }
                          }
                          

                          输出:测试-ab

                          【讨论】:

                            【解决方案21】:

                            如何在最后的递归中制作char:

                            public static String  removeChar(String word, char charToRemove)
                                {
                                    String char_toremove=Character.toString(charToRemove);
                                    for(int i = 0; i < word.length(); i++)
                                    {
                                        if(word.charAt(i) == charToRemove)
                                        {
                                            String newWord = word.substring(0, i) + word.substring(i + 1);
                                            return removeChar(newWord,charToRemove);
                                        }
                                    }
                                    System.out.println(word);
                                    return word;
                                }
                            

                            例如:

                            removeChar ("hello world, let's go!",'l') → "heo word, et's go!llll"
                            removeChar("you should not go",'o') → "yu shuld nt goooo"
                            

                            【讨论】:

                              【解决方案22】:

                              这是一个适用于基本多语言平面 (Java 8+) 之外的代码点的答案。

                              使用流:

                              public String method(String str) {
                                  return str.codePoints()
                                          .limit(str.codePoints().count() - 1)
                                          .mapToObj(i->new String(Character.toChars(i)))
                                          .collect(Collectors.joining());
                              }
                              

                              也许效率更高:

                              public String method(String str) {
                                  return str.isEmpty()? "": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
                              }
                              

                              【讨论】:

                                【解决方案23】:

                                我们可以使用子字符串。这是一个例子,

                                public class RemoveStringChar 
                                {
                                    public static void main(String[] args) 
                                    {   
                                        String strGiven = "Java";
                                        System.out.println("Before removing string character - " + strGiven);
                                        System.out.println("After removing string character - " + removeCharacter(strGiven, 3));
                                    }
                                
                                    public static String removeCharacter(String strRemove, int position)
                                    {   
                                        return strRemove.substring(0, position) + strRemove.substring(position + 1);    
                                    }
                                }
                                

                                【讨论】:

                                  【解决方案24】:
                                   // creating StringBuilder
                                   StringBuilder builder = new StringBuilder(requestString);
                                   // removing last character from String
                                   builder.deleteCharAt(requestString.length() - 1);
                                  

                                  【讨论】:

                                    【解决方案25】:

                                    在 Kotlin 中,您可以使用字符串类的 dropLast() 方法。 它将从字符串中删除给定的数字,返回一个新字符串

                                    var string1 = "Some Text"
                                    string1 = string1.dropLast(1)
                                    

                                    【讨论】:

                                      【解决方案26】:

                                      你可以做我 hereString = hereString.replace(hereString.chatAt(hereString.length() - 1) ,'whitespeace');

                                      【讨论】:

                                        【解决方案27】:

                                        这里的大多数答案都忘记了surrogate pairs

                                        例如,字符 ?(代码点 U+1D56B)不适合单个 char,因此为了表示,它必须形成两个字符的代理对。

                                        如果一个人简单地应用当前接受的答案(使用str.substring(0, str.length() - 1),一个人拼接代理对,导致意外结果。

                                        还应该检查最后一个字符是否是代理对:

                                        public static String removeLastChar(String str) {
                                            Objects.requireNonNull(str, "The string should not be null");
                                            if (str.isEmpty()) {
                                                return str;
                                            }
                                        
                                            char lastChar = str.charAt(str.length() - 1);
                                            int cut = Character.isSurrogate(lastChar) ? 2 : 1;
                                            return str.substring(0, str.length() - cut);
                                        }
                                        

                                        【讨论】:

                                        • 在一个角落里:这会抛出IndexOutOfBoundsException吗? (例如,当 Character.isSurrogate 之前实际上没有字符时,是否有可能返回 true,从而使 str.length()-cut 为负数)。
                                        • 是的,这是可能的。无论如何,它是一个无效的字符串,但仍然 - 有可能,是的。然后应将2 替换为Math.min(2, str.length())
                                        【解决方案28】:

                                        只需像这样替换“if”的条件:

                                        if(a.substring(a.length()-1).equals("x"))'
                                        

                                        这将为您解决问题。

                                        【讨论】:

                                          【解决方案29】:

                                          假设我的字符串总长度=24 我想将位置 14 之后的最后一个字符剪切到结束,这意味着我希望从 14 开始。 所以我应用以下解决方案。

                                          String date = "2019-07-31T22:00:00.000Z";
                                          String result = date.substring(0, date.length() - 14);
                                          

                                          【讨论】:

                                            【解决方案30】:
                                            public String removeLastCharacter(String str){
                                                   String result = null;
                                                    if ((str != null) && (str.length() > 0)) {
                                                      return str.substring(0, str.length() - 1);
                                                    }
                                                    else{
                                                        return "";
                                                    }
                                            
                                            }
                                            

                                            【讨论】:

                                              猜你喜欢
                                              • 2021-12-11
                                              • 2017-08-19
                                              • 2020-03-12
                                              • 2011-01-19
                                              • 2013-09-12
                                              • 2019-01-22
                                              相关资源
                                              最近更新 更多