我有一个要求,如果它出现在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);
}
答案 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(";$", "");