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

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

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

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

1293691 次浏览

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;
}
public String removeLastChar(String s) {
if (s == null || s.length() == 0) {
return s;
}
return s.substring(0, s.length()-1);
}

为什么不只是一条航线呢?

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

所描述的问题和提出的解决方案有时涉及到移除分隔器。如果这是你的情况,那么看看Apache Commons StringUtils,它有一个叫做removeEnd的方法,非常优雅。

例子:

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

将导致: "string 1|string 2|string 3"

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

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

以防你正在尝试阀杆英语单词

词干化是将屈折变化的(有时是派生的)单词还原到词干、词根或词根形式的过程,通常是书面的单词形式。

...

例如,英语的词干分析器应该识别字符串"cat "(可能还有&;catlike&;, &;catty"等)是基于词根“猫”、“stemmer”、“stemming"”、“stemmed"”;基于"stem"词干算法减少了单词“fishing”、“fishing”、“fish”和“fisheries”;到词根单词“鱼”。

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

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

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

用这个:

 if(string.endsWith("x")) {


string= string.substring(0, string.length() - 1);
}
不要试图重新发明轮子,而其他人已经编写了库来执行字符串操作: # EYZ1 < / p >
public String removeLastChar(String s) {
if (!Util.isEmpty(s)) {
s = s.substring(0, s.length()-1);
}
return s;
}

删除'xxx'的最后一次出现:

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

删除'xxx'的最后一次出现(如果它是最后一次):

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

你可以替换你想要的“xxx”,但要注意特殊字符

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

public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}
// 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;
}

查看StringBuilder类:

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

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

 string = string.substring(0, (string.length() - 1));

我在我的代码中使用这个,它很简单。 它只在字符串是>0. 我把它连接到一个按钮,在下面的如果语句

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

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

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

为什么不用转义序列…!

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

现在的生活容易多了。XD !~可读的一行代码

就可读性而言,我认为这是最简洁的

StringUtils.substring("string", 0, -1);
负索引可以在Apache的StringUtils实用程序中使用。

.

.

.

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

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

我所见过的关于这个主题的大多数代码都没有使用递归,所以希望我可以帮助您或有相同问题的人。

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

如何在最后的递归中创建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"

下面是一个适用于基本多语言平面(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())));
}
 // creating StringBuilder
StringBuilder builder = new StringBuilder(requestString);
// removing last character from String
builder.deleteCharAt(requestString.length() - 1);
在Kotlin中,您可以使用字符串类的dropLast()方法。 它将从字符串中删除给定的数字,返回一个新的字符串

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

你能做我 hereString = hereString.replace(hereString. chatat (hereString.length() - 1),' whitespeace');< / p >

这里的大多数答案都忘记了<强> < em >代理对< / em > < / >强

例如,字符𝕫(代码点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);
}

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

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

这将对你有用。

假设我的字符串总长度=24 我想把位置14后的最后一个字符切到结束,这意味着我想从14开始。 所以我应用下面的解决方案
String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);
public String removeLastCharacter(String str){
String result = null;
if ((str != null) && (str.length() > 0)) {
return str.substring(0, str.length() - 1);
}
else{
return "";
}


}

容易Peasy:

StringBuilder sb= new StringBuilder();
for(Entry<String,String> entry : map.entrySet()) {
sb.append(entry.getKey() + "_" + entry.getValue() + "|");
}
String requiredString = sb.substring(0, sb.length() - 1);

kotlin检查

string.dropLast(1)

如果你想在结尾删除特定的字符,你可以使用:

myString.removeSuffix("x")

简单的任务怎么变得复杂?我的解决方案是:

public String removeLastChar(String s) {
return s[0..-1]
}

public String removeLastChar(String s) {
if (s.length() > 0) {
return s[0..-1]
}
return s
}

使用StringUtils.Chop(Str),它也会处理null和空字符串,你需要导入common-io:

    <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>

如果我们想删除给定文件的文件扩展名,

**示例代码

 public static String removeNCharactersFromLast(String str,int n){
if (str != null && (str.length() > 0)) {
return str.substring(0, str.length() - n);
}


return "";


}

从Java 11开始,你可以使用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"
}

这个众所周知的问题在Perl中通过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);
}