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

452 java string

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

例如,这个词是"崇拜者"; 在我运行该方法后,我得到了"赞赏".我想让它返回admire这个词.

Gya*_*uyn 624

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;
}
Run Code Online (Sandbox Code Playgroud)

  • @AdamJensen在C中,你可能会意外地写出`if(str = NULL)`,它不仅总是评估为false(NULL == 0 == false),而且还会为`str`赋值,这很可能不是你的想做.你不能写`if(NULL = str)`但是因为NULL不是变量而且不能分配给它.因此,将NULL置于左侧是一种更安全的约定.但这在Java中不是问题. (24认同)
  • 你的意思是`str!= null &&`! (12认同)
  • 我会在检查开始时添加`null!= str &&`. (7认同)
  • @Marko大声笑是的,因为这是标准,当人们自己做东西时感觉很奇怪. (6认同)
  • @SSpoke它是一样的东西,你的只是更好看:) (2认同)

Fah*_*kar 228

为什么不只是一个班轮?

private static String removeLastChar(String str) {
    return str.substring(0, str.length() - 1);
}
Run Code Online (Sandbox Code Playgroud)

完整代码

import java.util.*;
import java.lang.*;

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) + "==");

    }

    private static String removeLastChar(String str) {
        return str.substring(0, str.length() - 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

演示

  • 应该考虑检查null和空字符串.. @BobBobBob版本更好 (7认同)

小智 86

由于我们是一个主题,人们也可以使用正则表达式

"aaabcd".replaceFirst(".$",""); //=> aaabc  
Run Code Online (Sandbox Code Playgroud)

  • 好的方式,当你想/需要准确定义你想要从字符串的末尾修剪什么,而不只是X任何字符 (3认同)

小智 70

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

例:

StringUtils.removeEnd("string 1|string 2|string 3|", "|");
Run Code Online (Sandbox Code Playgroud)

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


小智 46

public String removeLastChar(String s) {
    if (s == null || s.length() == 0) {
        return s;
    }
    return s.substring(0, s.length()-1);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果最后一个字符是高/低代理对怎么办? (4认同)

mem*_*und 32

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

  • @MikkelLøkke 我不知道,但无论如何这个问题都不是 Kotlin 问题?? (4认同)
  • 如果您只想删除最后一个字符-这是最佳答案! (2认同)

小智 18

用这个:

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

    string= string.substring(0, string.length() - 1);
 }
Run Code Online (Sandbox Code Playgroud)


Mik*_*uel 11

if (str.endsWith("x")) {
  return str.substring(0, str.length() - 1);
}
return str;
Run Code Online (Sandbox Code Playgroud)

例如,这个词是"崇拜者"; 在我运行该方法后,我得到了"赞赏".我想让它返回admire这个词.

如果你试图阻止英语单词

词干是将变形(或有时衍生)词语减少到词干,词根或词形的过程 - 通常是书面形式.

...

例如,英语的词干分析器应该根据根"cat"和"stemmer","stemming","stemmed"识别字符串"cats"(可能还有"catlike","catty"等).基于"干".词干算法将词语"钓鱼","钓鱼","鱼"和"渔夫"简化为词根"鱼".

Lucene词干分析器之间的区别:EnglishStemmer,PorterStemmer,LovinsStemmer概述了一些Java选项.


Kas*_*uri 9

就可读性而言,我发现这是最简洁的

StringUtils.substring("string", 0, -1);
Run Code Online (Sandbox Code Playgroud)

负索引可以在Apache的StringUtils实用程序中使用.所有负数都是从字符串末尾的偏移量处理的.


Don*_*oso 8

 string = string.substring(0, (string.length() - 1));
Run Code Online (Sandbox Code Playgroud)

我在我的代码中使用它,它既简单又简单。它仅在字符串 > 0 时有效。我将其连接到一个按钮并位于以下if语句内

if (string.length() > 0) {
    string = string.substring(0, (string.length() - 1));
}
Run Code Online (Sandbox Code Playgroud)


小智 6

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

var string1 = "Some Text"
string1 = string1.dropLast(1)
Run Code Online (Sandbox Code Playgroud)