Java-文字列の最初の文字を削除する


215

Javaでは、私は文字列を持っています:

Jamaica

文字列の最初の文字を削除してから返したい amaica

どうすればいいですか?

回答:


341

substring()引数を指定して関数を使用すると、1位置1(最初の文字の)から文字列の末尾までの部分文字列が取得されます(2番目の引数を省略した場合、デフォルトでは文字列の全長になります)。

"Jamaica".substring(1);

21
これは実際には文字列から文字を削除しないことに注意することが重要です。最初の文字列を除く古い文字列のすべての文字を含む新しい文字列が得られます。文字列を実際に変更する方法はありません。
Chris Dodd

リンクは無効になっているようです。代わりに次のリンクを試してください。substring(int)
Christian Hoffmann

1
ええ、文字列変数の最初のn文字を削除する場合は、次のようにします。variable = variable.substring(n);
MitulátBATI

67
public String removeFirstChar(String s){
   return s.substring(1);
}

12
新しい関数を定義する場合は、少なくとものような適切な名前を選択してくださいremoveFirst()
moinudin 2010


47

Javaでは、先頭の文字が特定の文字である場合にのみ削除します

Javaの三項演算子を使用して、キャラクターを削除する前に、キャラクターがそこにあるかどうかをすばやく確認します。これは、存在する場合にのみ先行文字を削除し、空白文字列を渡した場合は空白文字列を返します。

String header = "";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "foobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "#moobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

プリント:

blankstring
foobar
moobar

Java、文字列内の任意の場所にある文字のすべてのインスタンスを削除します。

String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"

Java、文字列の任意の場所にある文字の最初のインスタンスを削除します。

String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"

4
ドライ:header = header.substring(header.startsWith("#") ? 1 : 0);
アーロンブレンクシュ

3
または正規表現を使用して:header = header.replaceFirst("^#","");
アーロンブレンクシュ

18

開始インデックスのみを受け取り、指定されたインデックスの文字で始まり、文字列の最後まで続く部分文字列を返すクラスの部分文字列メソッドを使用できStringます。

String str = "Jamaica";
str = str.substring(1);


11

Javaで理解すべき重要な点は、文字列は不変であり、変更できないことです。したがって、「文字列から文字を削除する」ことは意味がありません。代わりに、必要な文字だけで新しい文字列を作成します。この質問の他の投稿では、さまざまな方法でそれを行うことができますが、これらは元の文字列をまったく変更しないことを理解することが重要です。古い文字列への参照は、引き続き古い文字列を参照し続け(別の文字列を参照するように変更しない限り)、新しく作成された文字列の影響を受けません。

これは、パフォーマンスに多くの影響を及ぼします。文字列を「変更」するたびに、実際にはすべてのオーバーヘッド(メモリ割り当てとガベージコレクション)を暗示する新しい文字列が作成されます。そのため、文字列に一連の変更を加え、最終結果のみを気にしたい場合(中間文字列は「変更」するとすぐに無効になります)、代わりにStringBuilderまたはStringBufferを使用する方が理にかなっています。


9

あなたはこのようにすることができます:

String str="Jamaica";
str=str.substring(1, title.length());
return str;

または一般的に:

public String removeFirstChar(String str){
   return str.substring(1, title.length());
}

8

substring()メソッドは、サブシーケンスを含む新しい文字列を返しますこのシーケンスに現在含まれている文字の。

部分文字列は指定された位置から始まり、の文字startまで拡張されindex end - 1ます。

これには2つの形式があります。最初は

  1. String substring(int FirstIndex)

ここで、FirstIndexは、部分文字列が始まるインデックスを指定します。このフォームは、FirstIndexで始まり、呼び出し文字列の最後まで実行される部分文字列のコピーを返します。

  1. String substring(int FirstIndex, int endIndex)

ここで、FirstIndexは開始インデックスを指定し、endIndexは停止ポイントを指定します。返される文字列には、開始インデックスから終了インデックスまでのすべての文字が含まれます。

    String str="Amiyo";
   // prints substring from index 3
   System.out.println("substring is = " + str.substring(3)); // Output "yo'

4

最初の文字(の場合)だけでなく、最初の文字#セットも削除しなければならない状況に遭遇しました。

String myString = ###Hello World出発点になるかもしれませんが、私はを保持したいだけですHello World。これは次のように行うことができます。

while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
    myString = myString.substring(1, myString.length());
}

OPの場合には、交換するwhileif、それがaswell動作します。


1
myString == "#"の場合、ある時点で文字列が範囲外になるため、問題が発生します。これを防ぐには、(!myString.isEmpty()&& myString.charAt(0))
クリスチャン

2

別の解決策として、replaceAllいくつかの正規表現^.{1}正規表現のデモ)を使用して問題を解決できます。次に例を示します。

String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica

1

先頭の文字を1つまたは複数削除する私のバージョン。たとえば、文字列str1 = "01234"、先頭の '0'を削除すると、結果は "1234"になります。文字列の場合、str2 = "000123"結果は再び "123"になります。また、文字列str3 = "000"の場合、結果は空の文字列 ""になります。このような機能は、数値文字列を数値に変換するときにしばしば役立ちます。正規表現(replaceAll(...))と比較したこのソリューションの利点は、これがはるかに高速であることです。これは、多数の文字列を処理する場合に重要です。

 public static String removeLeadingChar(String str, char ch) {
    int idx = 0;
    while ((idx < str.length()) && (str.charAt(idx) == ch))
        idx++;
    return str.substring(idx);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.