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

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,并将最后一个字母替换为空(删除它),但每次我运行程序时,它都会删除与最后一个字母相同的中间字母。

例如,单词是“仰慕者”;在我运行这个方法之后,我得到了“钦佩”。我想让它回复“钦佩”这个词。


当前回答

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

其他回答

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

例如,单词是“仰慕者”;在我运行这个方法之后,我得到了“钦佩”。我想让它回复“钦佩”这个词。

以防你想学英语单词

词干化是将屈折变化的(有时是派生的)单词还原到词干、词根或词根形式的过程,通常是书面的单词形式。 ... 例如,英语的词干器应该识别基于词根“cat”的字符串“cats”(可能还有“catlike”、“catty”等),以及基于“stem”的字符串“stemmer”、“stem”、“”。词干算法将单词“fishing”、“fishing”、“fish”和“fisher”简化为词根单词“fish”。

Lucene stemmer的区别:EnglishStemmer, PorterStemmer, LovinsStemmer概述了一些Java选项。

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

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

输出:test-ab

这个众所周知的问题在Perl中通过chop()和chomp()完美地解决了。

这里有一个很长的答案:Java chop and 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);
  }
public String removeLastChar(String s) {
    if (!Util.isEmpty(s)) {
        s = s.substring(0, s.length()-1);
    }
    return s;
}