Bagaimana merepresentasikan karakter kosong di kelas Karakter Java


126

Saya ingin mewakili karakter kosong di Java seperti ""di String ...

Seperti itu char ch = an empty character;

Sebenarnya saya ingin mengganti karakter tanpa meninggalkan spasi.

Saya pikir mungkin cukup untuk memahami apa artinya ini: tidak ada karakter bahkan ruang.


2
Perlihatkan contoh operasi ganti yang ingin Anda lakukan.
sudocode

1
@rahulsri Saya tidak bisa melihat kode yang Anda maksud.
Peter Lawrey

2
Saya pikir OP ingin melakukan String.replace(' ', EMPTY_CHARACTER)efek yang sama seperti String.replace(" ", ""). Yaitu menghapus semua spasi.
Roland

Jawaban:


134

Anda dapat menetapkan '\u0000'(atau 0). Untuk tujuan ini, gunakan Character.MIN_VALUE.

Character ch = Character.MIN_VALUE;

5
Apa '\0'sebenarnya artinya? @AVD
roti panggang kayu manis

8
@cinnamontoast - Its a null char literal
adatapost

11
Literal karakter nol masih merupakan karakter dan membutuhkan ruang dalam penyimpanan.
Jimmy T.

7
Pertanyaan tersebut menanyakan cara untuk mewakili 'tidak ada karakter'. Meskipun karakter nol berguna dalam banyak situasi, karakter tersebut masih merupakan karakter tersendiri, jadi tidak bisa menjadi jawaban untuk pertanyaan ini. Jawaban yang benar, sudah diberikan oleh user3001, adalah dengan menggunakan tipe referensi Karakter kotak Java dan berikan nilai 'null' ketika 'tidak ada karakter' diperlukan.
Chris Hatton

2
@AVD Ya, dan rahulsri menanyakan bagaimana merepresentasikan karakter yang hilang. Jadi referensi karakter nol cocok.
Chris Hatton

97

charartinya tepat satu karakter. Anda tidak dapat menetapkan nol karakter untuk jenis ini.

Itu berarti bahwa tidak ada nilai char yang String.replace(char, char)akan mengembalikan string dengan panjang berbeda.


14
Tiga tahun setelah kejadian tersebut, seseorang akhirnya memberikan jawaban yang benar dan lengkap.
Malnormalulo

Ini jawaban yang sangat akurat.
Edgar Asatryan

36

Karena Character adalah kelas yang diturunkan dari Object, Anda dapat menetapkan null sebagai "instance":

Character myChar = null;

Masalah terpecahkan;)


5
Ini adalah solusi yang benar dan harus menjadi jawaban yang diterima.
Chris Hatton

2
Walaupun ini tidak menjawab OP, tapi itu yang saya cari.
Elyess Abouda

2
Jawaban PALING benar adalah "itu tidak bisa dilakukan". Ini yang terdekat yang bisa Anda dapatkan.
Malnormalulo

2
Karakter adalah, tetapi char tidak.
Pieter De Bie

12

String kosong adalah pembungkus pada a char[]tanpa elemen. Anda boleh mengosongkan char[]. Tapi Anda tidak bisa memiliki yang "kosong" char. Seperti primitif lainnya, achar keharusan memiliki nilai.

Anda mengatakan Anda ingin "mengganti karakter tanpa meninggalkan spasi".

Jika Anda berurusan dengan a char[], maka Anda akan membuat filechar[] dengan elemen itu dihapus.

Jika Anda berurusan dengan a String, maka Anda akan membuat fileString (String tidak dapat diubah) dengan karakter dihapus.

Berikut beberapa contoh bagaimana Anda bisa menghapus karakter:

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

}

Selain solusi replace (), dua lainnya akan menggantikan hanya kemunculan pertama karakter dan tidak semua.
saktiw

8

Karena charsdapat direpresentasikan sebagai Integers (ASCII-Codes), Anda cukup menulis:

char c = 0;

0 dalam ASCII-Code adalah null.


0 sebagai unit kode UTF-16 ( char) adalah pengkodean UTF-16 lengkap untuk titik kode Unicode U + 0000. Kemiripan apa pun dengan beberapa himpunan karakter lain atau pengkodean karakter tidak relevan. UTF-16 adalah yang digunakan Java.
Tom Blodget

6

Jika Anda ingin mengganti karakter dalam String tanpa meninggalkan ruang kosong maka Anda dapat melakukannya dengan menggunakan StringBuilder. String adalah objek tetap di java, Anda tidak dapat memodifikasinya.

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

3

Tidak boleh. "" adalah literal untuk string, yang tidak berisi karakter. Itu tidak mengandung "karakter kosong" (apapun yang Anda maksud dengan itu).


3

Saya mencari ini. Cukup atur char c = 0;dan berfungsi dengan sempurna. Cobalah.

Misalnya, jika Anda mencoba menghapus karakter duplikat dari String, salah satu caranya adalah dengan mengubah string menjadi array karakter dan menyimpannya dalam hashset karakter yang secara otomatis akan mencegah duplikat.

Cara lain, bagaimanapun, adalah dengan mengubah string menjadi array char, menggunakan dua for-loop dan membandingkan setiap karakter dengan sisa string / char array (Big O pada aktivitas N ^ 2), lalu untuk setiap duplikat ditemukan setel karakter itu ke 0 ..

... dan gunakan new String(char[]) untuk mengubah array karakter yang dihasilkan menjadi string dan kemudian sysout untuk mencetak (ini semua java btw). Anda akan melihat semua karakter yang disetel ke nol sama sekali tidak ada dan semua duplikat hilang. posting panjang, tetapi hanya ingin memberi Anda contoh.

jadi ya set char c = 0;atau jika untuk array karakter, setel cArray[i]=0untuk karakter duplikat tertentu dan Anda akan menghapusnya.


2

Di java tidak ada yang namanya karakter kosong literal , dengan kata lain '' tidak memiliki arti seperti "" yang artinya string literal kosong

Hal terdekat yang bisa Anda lakukan untuk merepresentasikan karakter kosong adalah melalui karakter panjang nol [], seperti:

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

Jika Anda merujuk ke kelas String, konstruktor defaultnya membuat urutan karakter kosong menggunakan new char[0]

Selain itu, penggunaan Character.MIN_VALUE tidak benar karena ini bukan karakter yang benar-benar kosong, melainkan nilai karakter jenis yang paling kecil.

Saya juga tidak suka Character c = null;sebagai solusi terutama karena jvm akan membuang NPE jika mencoba membuka kotaknya. Kedua, null pada dasarnya adalah referensi ke tipe referensi wrt apa-apa dan di sini kita berurusan dengan tipe primitif yang tidak menerima null sebagai nilai yang mungkin.

Dengan asumsi bahwa dalam string, katakan str, OP ingin mengganti semua kemunculan karakter, katakan 'x', dengan karakter kosong '', lalu coba gunakan:

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

1

ini adalah bagaimana saya melakukannya.

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

Itu bukan karakter kosong. Ini adalah array karakter dengan panjang nol.
Stephen C

1
char ch = Character.MIN_VALUE;

Kode di atas akan menginisialisasi variabel chdengan nilai minimum yang dapat dimiliki char (yaitu \u0000).


1

Anda bisa melakukan sesuatu seperti ini:

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

0

Anda hanya dapat menggunakan kembali karakter yang sudah ada. mis. \0Jika Anda meletakkan ini di String, Anda akan memiliki String dengan satu karakter di dalamnya.


Katakanlah Anda menginginkan charhal itu ketika Anda melakukannya

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

yang harus Anda lakukan adalah

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

1
Apa maksudmu it not worked? Apakah maksud Anda itu tidak dapat dikompilasi? Dalam hal ini akan menjadi char ch = '\0';atauchar ch = 0;
Peter Lawrey

@rahulsri Semua karakter adalah karakter dan tidak ada karakter yang bukan karakter. Anda perlu mencari tahu apa kebutuhan Anda yang sebenarnya dan mencoba menyelesaikannya dengan cara yang berbeda. The nulkarakter adalah salah satu dari banyak karakter khusus yang menunjukkan karakter yang tidak benar-benar ada, tapi ia sendiri masih karakter.
Peter Lawrey

2
"Jika tuhan bisa melakukan apa saja, dapatkah tuhan menciptakan batu yang bahkan tidak bisa dia angkat?" Ini mirip dengan pertanyaan; Bisakah Anda membuat karakter yang bukan karakter?
Peter Lawrey

0

Gunakan \boperator (operator escape spasi mundur) di parameter kedua

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

xD ... hal-hal lucu akan terjadi jika mencoba menggunakan string yang rusak (ya, rusak, rusak, rusak) sebagai bagian dari misalnya nama file.
Scre

0

Hai, saya selalu membuat metode untuk hal-hal khusus yang biasanya tidak diterapkan di java. Berikut adalah metode sederhana yang saya buat untuk menghapus karakter dari String Fast

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

Untuk penjelasannya, ya tidak ada karakter null untuk diganti, tapi Anda bisa menghapus karakter seperti ini. Saya tahu ini pertanyaan lama, tetapi saya memposting jawaban ini karena kode ini mungkin berguna bagi sebagian orang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.