java - 如果字符串以字符串结尾,则从字符串中删除半冒号

时间:2012-10-09 18:30:19

标签: java string

我有一个要求,如果它出现在String的末尾(仅在结尾处),我需要删除分号。我试过以下代码。但它仍然没有被取代。任何人都可以在行号中的以下代码中告诉我需要更改的内容 (我在这里引用了代码How do I delete specific characters from a particular 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);
}

12 个答案:

答案 0 :(得分:21)

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(";+$", "");

答案 1 :(得分:18)

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

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

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

注意

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:3)

你不应该忘记String是不可变的。因此,每当您想要修改它时,您必须将结果分配给变量。

您需要的可能解决方案:

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

答案 4 :(得分:2)

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

待办事项

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

答案 5 :(得分:2)

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

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

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

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

答案 6 :(得分:2)

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

答案 7 :(得分:2)

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

text.substring(0, text.length() - 1)

答案 8 :(得分:2)

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

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

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

答案 9 :(得分: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(";", "");

答案 10 :(得分: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);
}

答案 11 :(得分: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(";$", "");