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


483

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

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

例如,单词是“崇拜者”;运行该方法后,我得到“ admie”。我希望它返回佩服一词。

Answers:


665

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

7
我会null != str && 在支票的开头加上。
James Oravec

12
你的意思是str != null &&
SSpoke

2
@SSpoke是同一回事,您的阅读起来还不错:)
Marko

6
@Marko大声笑是的,因为这是标准设置,当人们自己制作东西时感觉很奇怪。
辐射

26
@AdamJensen在C语言中,您可能会意外地编写if (str = NULL)该代码,它不仅总是评估为false(NULL == 0 == false),而且还会分配一个str很可能不是您想要执行的操作的值。if (NULL = str)但是,由于NULL不是变量且无法分配给您,因此您无法编写。因此,将NULL放在左侧是更安全的约定。不过,这在Java中不是问题。
吉安又名加里·巴恩(Gary Buy),2014年

236

为什么不只是一个班轮?

private static String removeLastChar(String str) {
    return str.substring(0, str.length() - 1);
}

完整代码

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

演示版


8
应该考虑检查null和空字符串。.@BobBobBob版本更好
KDjava 2012年

1
@KDjava:考虑到已传递有效字符串,上述内容才有效。否则我还必须添加try catch块以检查字符串是否正确...
Fahim Parkar 2012年

我在return str.substring(0,str.length()-1);改进之前添加了对空字符串的检查
shareef 2013年


@FahimParkar:因为最后一个字符可能不是我们要删除的字符,所以可能。但根据问题,您的答案是正确的
Ash18

91

由于我们正在研究主题,因此也可以使用正则表达式

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

3
不错的方法,当您想要/需要从字符串末尾精确定义要修剪的内容时,不仅要X字符
Julien




19

用这个:

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

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

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

例如,单词是“崇拜者”;运行该方法后,我得到“ admie”。我希望它返回佩服一词。

如果您想阻止英语单词

词干处理是将变形的(或有时衍生的)词减少为词干,基词或词根形式(通常是书面词形式)的过程。

...

例如,英语的词干分析器应基于根“ cat”来识别字符串“ cats”(可能还包括“ catlike”,“ catty”等),而“ stemmer”,“ stemming”,“ stemmed”则应识别为基于“词干”。词干提取算法将单词“ fishing”,“ fished”,“ fish”和“ fisher”简化为词根“ fish”。

Lucene词干提取器之间的区别:EnglishStemmer,PorterStemmer,LovinsStemmer概述了一些Java选项。


11

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

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

9

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

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

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


我不会说这是最好的答案-为简单起见,请使用org.apache.commons.lang.StringUtils.chop()方法。但是,使用-1的技巧确实不错,查看其他答案并不是很常用/众所周知。
iaforek '17

4

删除“ xxx”的最后一次出现:

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

如果最后出现“ xxx”,则将其删除:

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

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


4
 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);


3

查看StringBuilder类:

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

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

2

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

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


2

这里的大多数答案都忘记了代理对

例如,字符𝕫(代码点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负数)。
GPI

是的,那是可能的。无论如何,这是一个无效的字符串,但仍然可以(是)。然后应替换2Math.min(2, str.length())
MC Emperor

1

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


1
 "String name" = "String name".substring(0, ("String name".length() - 1));

我在我的代码中使用了它,很简单。它仅在String> 0时起作用。我将其连接到按钮并在以下if语句内

if ("String name".length() > 0) {
    "String name" = "String name".substring(0, ("String name".length() - 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 "";
        }

}

0

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


0

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

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

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

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


0

假设我的字符串的总长度= 24,我想在位置14之后切掉最后一个字符以结束,这意味着我想从14开始。因此,我采用以下解决方案。

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

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

十分简单:

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

-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]);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.