Javaでは、私は文字列を持っています:
Jamaica
文字列の最初の文字を削除してから返したい amaica
どうすればいいですか?
Javaでは、私は文字列を持っています:
Jamaica
文字列の最初の文字を削除してから返したい amaica
どうすればいいですか?
回答:
substring()
引数を指定して関数を使用すると、1
位置1(最初の文字の後)から文字列の末尾までの部分文字列が取得されます(2番目の引数を省略した場合、デフォルトでは文字列の全長になります)。
"Jamaica".substring(1);
public String removeFirstChar(String s){
return s.substring(1);
}
removeFirst()
。
substring()
前面からトリミングする文字数を使用して指定します。
String value = "Jamaica";
value = value.substring(1);
回答:「amaica」
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
String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"
String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"
header = header.substring(header.startsWith("#") ? 1 : 0);
header = header.replaceFirst("^#","");
Javaで理解すべき重要な点は、文字列は不変であり、変更できないことです。したがって、「文字列から文字を削除する」ことは意味がありません。代わりに、必要な文字だけで新しい文字列を作成します。この質問の他の投稿では、さまざまな方法でそれを行うことができますが、これらは元の文字列をまったく変更しないことを理解することが重要です。古い文字列への参照は、引き続き古い文字列を参照し続け(別の文字列を参照するように変更しない限り)、新しく作成された文字列の影響を受けません。
これは、パフォーマンスに多くの影響を及ぼします。文字列を「変更」するたびに、実際にはすべてのオーバーヘッド(メモリ割り当てとガベージコレクション)を暗示する新しい文字列が作成されます。そのため、文字列に一連の変更を加え、最終結果のみを気にしたい場合(中間文字列は「変更」するとすぐに無効になります)、代わりにStringBuilderまたはStringBufferを使用する方が理にかなっています。
substring()メソッドは、サブシーケンスを含む新しい文字列を返しますこのシーケンスに現在含まれている文字の。
部分文字列は指定された位置から始まり、の文字start
まで拡張されindex end - 1
ます。
これには2つの形式があります。最初は
String substring(int FirstIndex)
ここで、FirstIndexは、部分文字列が始まるインデックスを指定します。このフォームは、FirstIndexで始まり、呼び出し文字列の最後まで実行される部分文字列のコピーを返します。
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'
最初の文字(の場合)だけでなく、最初の文字#
セットも削除しなければならない状況に遭遇しました。
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の場合には、交換するwhile
とif
、それがaswell動作します。
先頭の文字を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);
}