16

文字列の最後(最後のみ)にセミコロンが存在する場合は、セミコロンを削除する必要があるという要件があります。次のコードを試しました。しかし、それでもそれは置き換えられていません。行番号の次のコードで何を変更する必要があるかを誰かに教えてもらえますか
(ここからコードを参照しました。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

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 に答える
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

文字列は不変であるため、置換後に新しい文字列が作成されます。

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

また

String newString = text.replaceAll(";$", "");
于 2012-10-09T18:36:00.193 に答える
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

提供したコードには複数の問題があります。

オブジェクトを比較 するには、 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

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 に答える