Java - bir dizenin ilk karakterini kaldırma


215

Java, bir dize var:

Jamaica

Dizenin ilk karakterini kaldırmak ve sonra geri dönmek istiyorum amaica

Bunu nasıl yaparım?

Yanıtlar:


341

Alt dizeyi konum 1'den ( ilk karakterden sonra ) dizenin sonuna (ikinci bağımsız değişkeni varsayılan olarak dizenin tam uzunluğuna bırakarak) almak için substring()işlevini bağımsız değişkeniyle kullanın .1

"Jamaica".substring(1);

21
Bunun aslında dizeden karakteri kaldırmamasını sağlamak önemlidir - birincisi hariç eski dizenin tüm karakterlerini içeren yeni bir dize verir. Bir dizeyi gerçekten değiştirmenin bir yolu yoktur.
Chris Dodd

Bağlantı artık geçerli değil. Bunun yerine şu bağlantıyı deneyin: substring (int)
Christian Hoffmann

1
Evet, bir dize değişkeninin ilk n karakterini kaldırmak isterseniz bunu yaparsınız: variable = variable.substring (n);
Mitulát báti

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

12
Yeni bir işlev tanımlayacaksanız, en azından gibi uygun bir ad seçin removeFirst().
moinudin

55

substring()Önden kırpmak istediğiniz karakter sayısını kullanın ve verin.

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

Cevap: "amaica"


47

Java'da, baştaki karakteri yalnızca belirli bir karakterse kaldırın

Java üçlü operatörünü kullanarak karakterinizi kaldırmadan önce orada olup olmadığını hızlıca kontrol edin. Bu, öndeki karakteri yalnızca varsa boş bir dize geçirilirse boş dizge döndürür.

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);

Baskılar:

blankstring
foobar
moobar

Java, bir dizenin herhangi bir yerinde bir karakterin tüm örneklerini kaldırın:

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

Java, dizenin herhangi bir yerinde bir karakterin ilk örneğini kaldırın:

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

4
KURU:header = header.substring(header.startsWith("#") ? 1 : 0);
Aaron Blenkush

3
Veya regex ile:header = header.replaceFirst("^#","");
Aaron Blenkush

18

Yalnızca başlangıç ​​dizinini alan ve belirtilen dizindeki karakterle başlayan ve dizenin sonuna kadar uzanan alt dizeyi döndüren sınıfın alt dize yöntemini kullanabilirsiniz String.

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

11
public String removeFirst(String input)
{
    return input.substring(1);
}

11

Java'da anlaşılması gereken en önemli şey, Dizelerin değişmez olmasıdır - bunları değiştiremezsiniz. Dolayısıyla 'bir karakter dizgiden çıkarılmasından' bahsetmek hiç mantıklı değil. Bunun yerine, yalnızca istediğiniz karakterlerle YENİ bir dize oluşturursunuz. Bu sorudaki diğer gönderiler size bunu yapmanın çeşitli yollarını sunar, ancak bunların orijinal dizeyi hiçbir şekilde değiştirmediğini anlamak önemlidir. Eski dizeye ilişkin başvurular, eski dizeye başvurmaya devam eder (bunları farklı bir dizeye başvurmak için değiştirmediğiniz sürece) ve yeni oluşturulan dizeden etkilenmez.

Bunun performans için bir takım etkileri vardır. Bir dizeyi her 'değiştirdiğinizde', aslında tüm ek yükü (bellek ayırma ve çöp toplama) içeren yeni bir dize oluşturuyorsunuz. Bu nedenle, bir dizede bir dizi değişiklik yapmak ve yalnızca nihai sonuca dikkat etmek istiyorsanız (ara dizeler, onları 'değiştirir değiştirmez' ölür), bunun yerine bir StringBuilder veya StringBuffer kullanmak daha mantıklı olabilir.


9

bunu yapabilirsiniz:

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

veya genel olarak:

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

8

substring () yöntemi, şu anda bu sırada bulunan karakterlerinbir alt dizisini içeren yeni bir Dize döndürür.

Alt dize belirtilende başlar startve konumundaki karaktere uzanır index end - 1.

İki şekli vardır. İlk olarak

  1. String substring(int FirstIndex)

Burada, FirstIndex alt dizenin başlayacağı dizini belirtir. Bu form, FirstIndex ile başlayan ve çağıran dizenin sonuna kadar çalışan alt dizenin bir kopyasını döndürür.

  1. String substring(int FirstIndex, int endIndex)

Burada, FirstIndex başlangıç ​​dizinini belirtir ve endIndex ise durma noktasını belirtir. Döndürülen dize, başlangıç ​​dizininden bitiş dizinine kadar olan, ancak bitiş dizinini içermeyen tüm karakterleri içerir.

Misal

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

4

Sadece ilk karakteri değil, ilk karakter #grubunu da kaldırmak zorunda kaldığım bir durumla karşılaştım .

String myString = ###Hello Worldbaşlangıç ​​noktası olabilir, ama ben sadece tutmak istiyorum Hello World. bu aşağıdaki gibi yapılabilir.

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

OP'ın durumda, yerini whileile ifve aswell çalışır.


1
Dize bir noktada sınırların dışında olacağından myString == "#" durumunda bir sorun olacaktır. Bunu önlemek için (! MyString.isEmpty () && myString.charAt (0))
Christian

2

Başka bir çözüm, örneğin replaceAllbazı regex ^.{1}( regex demo ) kullanarak sorununuzu çözebilirsiniz :

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

1

Bir veya daha fazla önde gelen karakterleri kaldırma sürümüm. Örneğin, string1 = "01234", önde gelen '0' kaldırılırken sonuç "1234" olur. Bir String için str2 = "000123" sonucu tekrar "123" olur. Ve String str3 = "000" için sonuç boş string olacaktır: "". Bu tür işlevsellik, sayısal dizeleri sayılara dönüştürürken genellikle kullanışlıdır. Çok sayıda Dizeyi işlerken bu önemlidir.

 public static String removeLeadingChar(String str, char ch) {
    int idx = 0;
    while ((idx < str.length()) && (str.charAt(idx) == ch))
        idx++;
    return str.substring(idx);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.