如何从字符串中删除最后一个字符?

597

我想从字符串中删除最后一个字符。我尝试了以下方法:

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”。我希望它返回单词admire。

37个回答

1
对于Kotlin,请查看:
string.dropLast(1)

1
public String removeLastCharacter(String str){
       String result = null;
        if ((str != null) && (str.length() > 0)) {
          return str.substring(0, str.length() - 1);
        }
        else{
            return "";
        }

}

1
如果我们想要删除给定文件的文件扩展名,
**样例代码
 public static String removeNCharactersFromLast(String str,int n){
    if (str != null && (str.length() > 0)) {
        return str.substring(0, str.length() - n);
    }

    return "";

}

0
这是一个适用于基本多语言平面之外的代码点(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())));
}

0

我曾经为一个类似的问题编写代码。我解决它的方法之一是使用递归编程方法。

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;
}

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


0

自Java 8以来,您可以使用Optional来避免空指针异常并使用函数式编程:

public String removeLastCharacter(String string) {
    return Optional.ofNullable(string)
        .filter(str -> !str.isEmpty() && !string.isBlank())
        .map(str -> str.substring(0, str.length() - 1))
        .orElse(""); // Should be another value that need if the {@param: string} is "null"
}

0

这是一个众所周知的问题,通过Perl中的chop()和chomp()方法优美地解决了。

详细答案请参见:Java chop和chomp

以下是代码:

  //removing trailing characters
  public static String chomp(String str, Character repl) {
    int ix = str.length();
    for (int i=ix-1; i >= 0; i-- ){
      if (str.charAt(i) != repl) break;
      ix = i;
    }
    return str.substring(0,ix);
  }
  
  //hardcut  
  public static String chop(String str) {
    return str.substring(0,str.length()-1);
  }

0

如何使递归中的字符在结尾处:

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"

0

如果你的 JSON 中有特殊字符,如分号 ";",只需使用 String.replace(";", "") 就行了。否则,你必须重写字符串中除最后一个字符外的所有字符。


0

为什么不使用转义序列呢...!

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

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


这不是Java吗。LMAO - baranskistad
'\b' 的特殊行为由字符串读取器、文本终端等解释,否则它只是另一种 ASCII 字符表示。https://dev59.com/e2ct5IYBdhLWcg3wsPd5#11891895 - Sudip Bhandari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接