16

我有一个要求,如果分号出现在字符串的末尾(仅在末尾),我需要删除它。我已经尝试了以下代码。但它仍然没有被替换。谁能告诉我需要在行号中的以下代码中更改什么
(我从这里引用了代码How do I delete specific characters from a specific String in Java?

public static void main(String[] args) {
    String text = "wherabouts;";
    System.out.println("SSS "+text.substring(text.length()-1));
    if(text.substring(text.length()-1) == ";"){
        text.replaceAll(";", "");
    }
    System.out.println("TEXT : "+text);
}
4

12 回答 12

25
text.replaceAll(";", "");

由于 Java 中的字符串是不可变的,因此replaceALl()方法不会进行就地替换,而是返回一个新的修改后的字符串。因此,您需要将返回值存储在其他字符串中。另外,要匹配末尾的分号,您需要在$后面使用量词;

text = text.replaceAll(";$", "");

$表示字符串的结尾,因为您要替换最后一个semi-colon..

如果您不使用$,它将替换;您字符串中的所有 ..

或者,对于您的工作,您可以简单地使用它,如果您想删除最后一个;

    if (text.endsWith(";")) {
        text = text.substring(0, text.length() - 1);
        System.out.println(text);
    }

更新:而且,如果最后有更多的分号:

text = text.replaceAll(";+$", "");
于 2012-10-09T18:34:44.080 回答
18

String modifiedText = text.replaceAll(";$", "");

或者

text = text.replaceAll(";$", "");

或者

if (text.endsWith(";")) {
    text = text.substring(0, text.length() - 1);
}

注意

字符串是不可变的。这意味着您无法更改它们。

因此,您必须重新分配文本或将其设置为新变量。

于 2012-10-09T18:32:01.500 回答
3
text = text.replaceAll(";", "");

这是给你的一点额外阅读 http://javarevisited.blogspot.com/2010/10/why-string-is-immutable-in-java.html

于 2012-10-09T18:31:48.053 回答
3

你不应该忘记 String 是不可变的。因此,无论何时要修改它,都必须将结果分配给一个变量。

您需要的可能解决方案:

if (text.endsWith(";") {
  text = text.substring(0, text.length() - 1);
}
于 2012-10-09T18:32:08.927 回答
2

String 是不可变的,因此替换后将创建新的 String。

String newString = text.replace(";", "");

或者

String newString = text.replaceAll(";$", "");
于 2012-10-09T18:36:00.193 回答
2
if (text.endsWith(";")){
    text = text.substring(0,text.length()-1);
}
于 2012-10-09T18:34:03.197 回答
2

您使用了错误的版本String.substring,您可以使用:

text.substring(0, text.length() - 1)
于 2012-10-09T18:34:15.823 回答
2

java中的字符串是不可变的,所以replaceAll返回一个新的字符串。

 text = text.replaceAll(";", "");
于 2012-10-09T18:32:06.853 回答
2

如果您要使用而.equals()不是,请使用而不是:==substring()charAt()

if(text.substring(text.length()-1).equals(";"))

此外,重新分配您的文本变量:

text = text.replaceAll(";", "");
于 2012-10-09T18:32:13.483 回答
1

您提供的代码中存在多个问题。

使用equals比较对象。

if(text.substring(text.length()-1).equals(";"))

如果只想替换最后一个字符,则不需要replaceAll。

要么这样做

if(text.substring(text.length()-1).equals(";")) {
      text = text.substring(0, text.length()-1);
    } 

或者

text = text.replaceAll(";", "");
于 2012-10-09T18:44:08.640 回答
1
public static void main(String[] args) {
    String text_original = "wherabouts;";
    char[] c = text_original.toCharArray();

    System.out.println("TEXT original: "+ text_original);

    String text_new = c[text_original.length()-1] == ';' ? text_original.substring(0,text_original.length()-2) : text_original;

    System.out.println("TEXT new: "+text_new);
}
于 2012-10-09T18:50:20.783 回答
1

只有一个分号的解决方案

// Don't use regular expressions if you don't need to.
if (text.endsWith(";")) {
    text = text.substring(0, text.length() - 1);
}

可能不止一个分号的较慢解决方案

text.replaceAll(";+$", "");

另外,这里是您最初发布的代码的一些其他问题,以供参考。

if(text.substring(text.length()-1) == ";"){

您不能将字符串与==. 相反,您必须将它们与.equals(). 这将正确地写成这样...ength()-1).equals(";")

text.replaceAll(";", "");

这将替换它找到的所有分号。这意味着如果您的字符串是some;thing;,它会将其转换为something,但您只想删除最后一个分号,如下所示some;thing:要正确执行此操作,您需要使用如下特殊$字符查找字符串的结尾:

text.replaceAll(";$", "");
于 2012-10-09T18:55:40.227 回答