Come rappresentare un carattere vuoto nella classe Java Character


126

Voglio rappresentare un carattere vuoto in Java come "" in String ...

Come quello char ch = an empty character;

In realtà voglio sostituire un personaggio senza lasciare spazio.

Penso che potrebbe essere sufficiente per capire cosa significa: nessun personaggio nemmeno lo spazio.


2
Mostra un esempio dell'operazione di sostituzione che desideri eseguire.
sudocodice

1
@rahulsri Non riesco a vedere il codice a cui ti riferisci.
Peter Lawrey

2
Penso che OP voglia esibirsi String.replace(' ', EMPTY_CHARACTER)per avere lo stesso effetto di String.replace(" ", ""). Vale a dire rimuovere tutti gli spazi.
Roland

Risposte:


134

Puoi assegnare '\u0000'(o 0). A questo scopo, usa Character.MIN_VALUE.

Character ch = Character.MIN_VALUE;

5
Cosa significa '\0'esattamente? @AVD
toast alla cannella,

8
@cinnamontoast - È un valore letterale nullo
adatapost

11
Un valore letterale nullo è ancora un carattere e occupa spazio nella memoria.
Jimmy T.

7
La domanda chiede un modo per rappresentare "nessun personaggio". Sebbene il carattere nullo sia utile in molte situazioni, è ancora un carattere a sé stante, quindi non può essere la risposta a questa domanda. La risposta corretta, già fornita da user3001, è usare il tipo di riferimento Character boxed di Java e assegnargli il valore "null" quando è necessario "nessun carattere".
Chris Hatton

2
@AVD Sì, e Rahulsri chiede come rappresentare un personaggio mancante. Quindi un riferimento a carattere nullo si adatta.
Chris Hatton

97

charsignifica esattamente un carattere. Non puoi assegnare zero caratteri a questo tipo.

Ciò significa che non esiste alcun valore di carattere per il quale String.replace(char, char)restituirebbe una stringa con una lunghezza diversa.


14
Tre anni dopo il fatto, qualcuno ha finalmente dato una risposta corretta e completa.
Malnormalulo

Questa è una risposta molto accurata.
Edgar Asatryan

36

Poiché Character è una classe derivante da Object, puoi assegnare null come "istanza":

Character myChar = null;

Problema risolto ;)


5
Questa è una soluzione corretta e dovrebbe essere la risposta accettata.
Chris Hatton

2
Anche se questo non risponde all'OP, è quello che stavo cercando.
Elyess Abouda

2
La risposta PIÙ corretta è "non si può fare". Questo è il più vicino che puoi trovare.
Malnormalulo

2
Il carattere lo è, ma il carattere non lo è.
Pieter De Bie

12

Una stringa vuota è un wrapper su un char[]senza elementi. Puoi avere un vuoto char[]. Ma non puoi avere un "vuoto" char. Come altre primitive, a chardeve avere un valore.

Dici di voler "sostituire un personaggio senza lasciare uno spazio".

Se hai a che fare con un char[], ne creerai uno nuovo char[]con quell'elemento rimosso.

Se hai a che fare con un String, creeresti un nuovo fileString (String è immutabile) con il carattere rimosso.

Ecco alcuni esempi di come rimuovere un carattere:

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

}

A parte la soluzione replace (), altre due sostituiranno solo la prima occorrenza del carattere e non tutte.
sactiw

8

Poiché charspuò essere rappresentato come numeri interi (codici ASCII), puoi semplicemente scrivere:

char c = 0;

Lo 0 nel codice ASCII è null.


0 come unità di codice UTF-16 ( char) è la codifica UTF-16 completa per il punto di codice Unicode U + 0000. Qualsiasi somiglianza con qualche altro set di caratteri o codifica dei caratteri è irrilevante. UTF-16 è ciò che utilizza Java.
Tom Blodget

6

Se vuoi sostituire un carattere in una stringa senza lasciare spazi vuoti, puoi farlo utilizzando StringBuilder. String è un oggetto immutabile in java, non puoi modificarlo.

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

3

Non puoi. "" è il letterale di una stringa, che non contiene caratteri. Non contiene il "carattere vuoto" (qualunque cosa tu intenda con questo).


3

Stavo cercando questo. Basta impostare char c = 0;e funziona perfettamente. Provalo.

Ad esempio, se stai tentando di rimuovere caratteri duplicati da una stringa, un modo sarebbe convertire la stringa in un array di caratteri e archiviarla in un hashset di caratteri che impedirebbe automaticamente i duplicati.

Un altro modo, tuttavia, sarà quello di convertire la stringa in un array di caratteri, utilizzare due cicli for e confrontare ogni carattere con il resto dell'array di stringhe / caratteri (un Big O sull'attività N ^ 2), quindi per ogni duplicato trovato imposta quel carattere su 0 ..

... e usa new String(char[]) per convertire l'array char risultante in stringa e poi sysout per stampare (questo è tutto java btw). osserverai che tutti i caratteri impostati su zero semplicemente non ci sono e tutti i duplicati sono spariti. post lungo, ma volevo solo farti un esempio.

quindi sì impostato char c = 0;o se per array di caratteri, impostato cArray[i]=0per quel carattere duplicato specifico e lo avrai rimosso.


2

In java non c'è niente come un carattere letterale vuoto , in altre parole, "" non ha significato a differenza di "" che significa un letterale String vuoto

Il massimo che puoi fare per rappresentare un carattere letterale vuoto è attraverso il carattere di lunghezza zero [], qualcosa come:

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

Se fai riferimento alla classe String, il suo costruttore predefinito crea una sequenza di caratteri vuota usando new char[0]

Inoltre, l'utilizzo di Character.MIN_VALUE non è corretto perché non è realmente un carattere vuoto, ma piuttosto il valore più piccolo del tipo carattere.

Inoltre non mi piace Character c = null;come soluzione principalmente perché jvm lancerà NPE se cerca di decomprimerlo. In secondo luogo, null è fondamentalmente un riferimento a niente rispetto al tipo di riferimento e qui abbiamo a che fare con tipi primitivi che non accettano null come possibile valore.

Supponendo che nella stringa, diciamo str, OP voglia sostituire tutte le occorrenze di un carattere, diciamo 'x', con un carattere vuoto '', quindi prova a usare:

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

1

questo è come lo faccio.

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

Non è un personaggio vuoto. È un array di caratteri di lunghezza zero.
Stephen C

1
char ch = Character.MIN_VALUE;

Il codice sopra inizializzerà la variabile chcon il valore minimo che un carattere può avere (cioè \u0000).


1

Puoi fare qualcosa del genere:

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

0

Puoi riutilizzare solo un personaggio esistente. Ad esempio, \0se lo metti in una stringa, avrai una stringa con un carattere al suo interno.


Di 'che vuoi un file char tale quando lo fai

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

quello che devi fare invece è

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

1
Cosa intendi it not worked? Vuoi dire che non si compila? In tal caso sarebbe char ch = '\0';ochar ch = 0;
Peter Lawrey

@rahulsri Tutti i personaggi sono personaggi e non c'è carattere che non sia un personaggio. Devi capire qual è il tuo reale requisito e cercare di risolverlo in un modo diverso. Il nulpersonaggio è uno dei tanti caratteri speciali che indica che è un carattere che non è realmente presente, ma è esso stesso un carattere.
Peter Lawrey

2
"Se dio può fare qualcosa, può dio creare una roccia anche se non può sollevare?" È simile alla domanda; Puoi creare un personaggio che non sia un personaggio?
Peter Lawrey

0

Usa l' \boperatore (l'operatore di escape backspace) nel secondo parametro

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 ... risulteranno cose divertenti se si cerca di utilizzare una stringa così alterata (sì, alterata, sbranata, sfigurata) come parte, ad esempio, del nome del file.
Scre

0

Ehi, creo sempre metodi per cose personalizzate che di solito non sono implementate in java. Ecco un metodo semplice che ho creato per rimuovere il carattere da 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();
    }

Per la spiegazione, sì, non esiste un carattere nullo per la sostituzione, ma puoi rimuovere il carattere in questo modo. So che è una vecchia domanda, ma sto postando questa risposta perché questo codice potrebbe essere utile per alcune persone.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.