Java Karakter sınıfında boş karakter nasıl temsil edilir


126

""String'de olduğu gibi Java'da da boş bir karakteri temsil etmek istiyorum ...

Bunun gibi char ch = an empty character;

Aslında boşluk bırakmadan bir karakteri değiştirmek istiyorum.

Bunun ne anlama geldiğini anlamanın yeterli olabileceğini düşünüyorum: karakter yok, boşluk bile yok.


2
Gerçekleştirmek istediğiniz değiştirme işleminin bir örneğini gösterin.
sudocode

1
@rahulsri Bahsettiğiniz kodu göremiyorum.
Peter Lawrey

3
Bence OP String.replace(' ', EMPTY_CHARACTER)ile aynı etkiye sahip olmak istiyor String.replace(" ", ""). Yani tüm boşlukları kaldırın.
Roland

Yanıtlar:


134

'\u0000'(Veya 0) atayabilirsiniz . Bu amaçla kullanın Character.MIN_VALUE.

Character ch = Character.MIN_VALUE;

5
'\0'Tam olarak ne anlama geliyor? @AVD
cinnamon toast

8
@cinnamontoast - Onun bir boş karakter değişmezi
adatapost

11
Bir boş karakter değişmezi hala bir karakterdir ve depolamada yer kaplar.
Jimmy T.

7
Soru, 'karakter yok'u temsil etmenin bir yolunu sorar. Boş karakter birçok durumda yararlı olsa da, yine de kendi başına bir karakterdir, bu nedenle bu sorunun cevabı olamaz. User3001 tarafından zaten verilen doğru cevap, Java'nın kutulu Karakter referans türünü kullanmak ve 'karakter yok' gerektiğinde ona 'boş' değer vermektir.
Chris Hatton

2
@AVD Evet, ve rahulsri eksik bir karakterin nasıl temsil edileceğini soruyor. Yani boş karakter referansı uyuyor.
Chris Hatton

97

chartam olarak bir karakter anlamına gelir. Bu türe sıfır karakter atayamazsınız.

Bu, String.replace(char, char)farklı uzunlukta bir dize döndürecek bir char değeri olmadığı anlamına gelir .


14
Olaydan üç yıl sonra, sonunda birisi doğru ve eksiksiz bir cevap verdi.
Malnormalulo

Bu çok doğru bir cevap.
Edgar Asatryan

36

Karakter, Object'ten türetilen bir sınıf olduğu için, "örnek" olarak null atayabilirsiniz:

Character myChar = null;

Sorun çözüldü ;)


5
Bu doğru bir çözümdür ve kabul edilen yanıt olmalıdır.
Chris Hatton

2
Bu OP'ye cevap vermese de, aradığım şey buydu.
Elyess Abouda

2
EN doğru cevap "yapılamaz" dır. Bu alabileceğiniz en yakın yer.
Malnormalulo

2
Karakter, ama karakter değil.
Pieter De Bie

12

Boş bir String, öğesi olmayan bir sarmalayıcıdır char[]. Boş olabilir char[]. Ama "boş" olamazsın char. Diğer ilkeller gibi, a charda bir değere sahip olmalıdır.

"Boşluk bırakmadan bir karakteri değiştirmek" istediğinizi söylüyorsunuz.

Bir ile uğraşıyorsanız char[], o char[]elemanı kaldırarak yeni bir tane yaratırsınız.

Bir ile uğraşıyorsanız String, Stringkaldırılan karakterle yeni bir (String değişmez) oluşturursunuz.

İşte bir karakteri nasıl kaldırabileceğinize dair bazı örnekler:

public static void main(String[] args) throws Exception {

    String s = "abcdefg";
    int index = s.indexOf('d');

    // delete a char from a char[]
    char[] array = s.toCharArray();
    char[] tmp = new char[array.length-1];
    System.arraycopy(array, 0, tmp, 0, index);
    System.arraycopy(array, index+1, tmp, index, tmp.length-index);
    System.err.println(new String(tmp));

    // delete a char from a String using replace
    String s1 = s.replace("d", "");
    System.err.println(s1);

    // delete a char from a String using StringBuilder
    StringBuilder sb = new StringBuilder(s);
    sb.deleteCharAt(index);
    s1 = sb.toString();
    System.err.println(s1);

}

Replace () çözümünün dışında diğer ikisi, karakterin yalnızca ilk geçtiği yerin yerini alacak, tümü değil.
sactiw

8

As charstamsayılar (ASCII kodları) olarak temsil edilebilir, sadece yazabilirsiniz:

char c = 0;

ASCII Kodundaki 0'dır null.


UTF-16 kod birimi olarak 0 ( char), Unicode kod noktası U + 0000 için tam UTF-16 kodlamasıdır. Başka bir karakter setine veya karakter kodlamasına herhangi bir benzerlik konu dışıdır. UTF-16, Java'nın kullandığı şeydir.
Tom Blodget

6

Bir String'deki bir karakteri boş alan bırakmadan değiştirmek istiyorsanız, bunu StringBuilder kullanarak gerçekleştirebilirsiniz. String, java'da değişmez bir nesnedir, onu değiştiremezsiniz.

String str = "Hello";
StringBuilder sb = new StringBuilder(str);
sb.deleteCharAt(1); // to replace e character

3

Yapamazsın. "" İçeren bir dize için değişmez olduğu hiçbir karakter. "Boş karakter" içermiyor (bununla ne demek istiyorsan).


3

Ben bunu arıyordum. Basitçe ayarlayın char c = 0;ve mükemmel çalışıyor. Dene.

Örneğin, bir String'den yinelenen karakterleri kaldırmaya çalışıyorsanız, bunun bir yolu, dizeyi char dizisine dönüştürmek ve kopyaları otomatik olarak önleyecek bir karakter karma kümesinde saklamaktır.

Bununla birlikte, başka bir yol, dizeyi bir char dizisine dönüştürmek, iki for-döngüsü kullanmak ve her bir karakteri dizge / char dizisinin geri kalanıyla (N ^ 2 etkinliğinde bir Büyük O), ardından bulunan her kopya için karşılaştırmak olacaktır. sadece bu karakteri 0 olarak ayarlayın ..

... ve new String(char[])ortaya çıkan karakter dizisini dizeye dönüştürmek için kullanın ve sonra yazdırmak için sysout'u kullanın (hepsi java btw). Sıfıra ayarlanmış tüm karakterlerin orada olmadığını ve tüm kopyaların kaybolduğunu göreceksiniz. uzun bir gönderi, ancak size bir örnek vermek istedim.

öyleyse yes set char c = 0;veya char dizisi cArray[i]=0için ise , o belirli yinelenen karakter için ayarlayın ve onu kaldırmış olacaksınız.


2

Java'da boş karakter değişmezi diye bir şey yoktur , başka bir deyişle '', boş bir String değişmezi anlamına gelen "" den farklı bir anlama sahip değildir.

Boş karakter değişmezlerini temsil etmek için en yakın yol, sıfır uzunluklu char [] ile olabilir, örneğin:

char[] cArr = {};         // cArr is a zero length array
char[] cArr = new char[0] // this does the same

String sınıfına başvurursanız, varsayılan yapıcısı kullanarak boş bir karakter dizisi oluşturur. new char[0]

Ayrıca, Karakter.MIN_VALUE kullanmak doğru değildir, çünkü gerçekten boş bir karakter değil, en küçük tip karakter değeri.

Ben de sevmiyorum Character c = null; bir çözüm olarak çünkü jvm, kutuyu açmaya çalışırsa NPE'yi atacak. İkinci olarak, null temelde hiçbir referans türü için bir referanstır ve burada null değerini olası bir değer olarak kabul etmeyen ilkel türle uğraşıyoruz.

Dizede, örneğin str, OP'nin bir karakterin tüm oluşumlarını değiştirmek istediğini varsayarsak, 'x' diyelim, boş karakterle '', sonra kullanmayı deneyin:

str.replace("x", "");

1

ben böyle yaparım.

char[] myEmptyCharArray = "".toCharArray();

Bu boş bir karakter değil. Sıfır uzunlukta bir karakter dizisidir.
Stephen C

1
char ch = Character.MIN_VALUE;

Yukarıdaki kod, değişkeni chbir karakterin sahip olabileceği minimum değerle başlatacaktır (yani \u0000).


1

Bunun gibi bir şey yapabilirsiniz:

mystring.replace(""+ch, "");

0

Yalnızca mevcut bir karakteri yeniden kullanabilirsiniz. Örneğin \0, bunu bir String'e koyarsanız, içinde bir karakter olan bir String'e sahip olursunuz.


charBöyle istediğini söyle, istediğinde

String s = 
char ch = ?
String s2 = s + ch; // there is not char which does this.
assert s.equals(s2);

bunun yerine yapman gereken şey

String s = 
char ch = MY_NULL_CHAR;
String s2 = ch == MY_NULL_CHAR ? s : s + ch;
assert s.equals(s2);

1
Ne demek it not workedistiyorsun Derlenmediğini mi söylüyorsunuz? Bu durumda, char ch = '\0';veyachar ch = 0;
Peter Lawrey

@rahulsri Tüm karakterler karakterdir ve karakter olmayan karakter yoktur. Gerçek ihtiyacınızın ne olduğunu bulmanız ve bunu farklı bir şekilde çözmeye çalışmanız gerekir. nulKarakter yok gerçekten onun bir karakter gösterir birçok özel karakterler biridir, ama yine de bir karakter kendisi olduğunu.
Peter Lawrey

2
"Tanrı bir şey yapabiliyorsa, Tanrı kaldıramadığı bir kaya yaratabilir mi?" Soruya benzer; Karakter olmayan bir karakter yaratabilir misin?
Peter Lawrey

0

\bİkinci parametrede operatörü (geri alma kaçış operatörü) kullanın

String test= "Anna Banana";

System.out.println(test); //returns Anna Banana<br><br>
System.out.println(test.replaceAll(" ","\b")); //returns AnnaBanana removing all the spaces in the string

Örneğin dosya adının bir parçası olarak bu şekilde karıştırılmış (evet, karıştırılmış, parçalanmış, şekli bozulmuş) dizeyi kullanmaya çalışırsanız, xD ... eğlenceli şeyler ortaya çıkacaktır.
Scre

0

Hey, her zaman java'da uygulanmayan özel şeyler için yöntemler yaparım. İşte String Fast'tan karakteri kaldırmak için yaptığım basit bir yöntem

    public static String removeChar(String str, char c){
        StringBuilder strNew=new StringBuilder(str.length());
        char charRead;
        for(int i=0;i<str.length();i++){
            charRead=str.charAt(i);
            if(charRead!=c)
                strNew.append(charRead);
        }
        return strNew.toString();
    }

Açıklamak gerekirse, evet, değiştirilecek boş karakter yoktur, ancak bu şekilde karakteri kaldırabilirsiniz. Bunun eski bir soru olduğunu biliyorum, ancak bu cevabı gönderiyorum çünkü bu kod bazı kişiler için yararlı olabilir.

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.