So stellen Sie leere Zeichen in der Java-Zeichenklasse dar

125

Ich möchte ein leeres Zeichen in Java wie ""in String darstellen ...

So wie das char ch = an empty character;

Eigentlich möchte ich einen Charakter ersetzen, ohne Platz zu lassen.

Ich denke, es könnte ausreichen zu verstehen, was dies bedeutet: kein Charakter, nicht einmal Leerzeichen.

rahulsri
quelle
2
Zeigen Sie ein Beispiel für den Ersetzungsvorgang, den Sie ausführen möchten.
Sudocode
1
@rahulsri Ich kann den Code, auf den Sie sich beziehen, nicht sehen.
Peter Lawrey
2
Ich denke, dass OP eine Leistung erbringen möchte, um String.replace(' ', EMPTY_CHARACTER)den gleichen Effekt zu erzielen wie String.replace(" ", ""). Dh alle Leerzeichen entfernen.
Roland

Antworten:

133

Sie können zuweisen '\u0000'(oder 0). Verwenden Sie zu diesem Zweck Character.MIN_VALUE.

Character ch = Character.MIN_VALUE;
Adatapost
quelle
5
Was bedeutet '\0'genau? @ AVD
Zimt Toast
8
@ Cinnamontoast - Es ist ein Null-
Zeichen-
11
Ein Nullzeichenliteral ist immer noch ein Zeichen und nimmt Speicherplatz in Anspruch.
Jimmy T.
7
In der Frage wird nach einer Möglichkeit gefragt, "keine Zeichen" darzustellen. Obwohl das Nullzeichen in vielen Situationen nützlich ist, ist es immer noch ein eigenständiges Zeichen und kann daher nicht die Antwort auf diese Frage sein. Die richtige Antwort, die bereits von user3001 gegeben wurde, besteht darin, den Referenztyp für Zeichen in Java zu verwenden und ihm den Wert 'null' zu geben, wenn 'kein Zeichen' benötigt wird.
Chris Hatton
2
@ AVD Ja, und Rahulsri fragt, wie ein fehlender Charakter dargestellt werden soll. Es passt also eine Nullzeichenreferenz.
Chris Hatton
95

charbedeutet genau ein Zeichen. Sie können diesem Typ keine Nullzeichen zuweisen.

Das bedeutet, dass es keinen Zeichenwert gibt, für den String.replace(char, char)eine Zeichenfolge mit einer anderen Länge zurückgegeben werden würde.

Jimmy T.
quelle
13
Drei Jahre später gab endlich jemand eine korrekte und vollständige Antwort.
Malnormalulo
Dies ist eine sehr genaue Antwort.
Edgar Asatryan
36

Da Character eine von Object abgeleitete Klasse ist, können Sie null als "Instanz" zuweisen:

Character myChar = null;

Problem gelöst ;)

user3001
quelle
5
Dies ist eine korrekte Lösung und sollte die akzeptierte Antwort sein.
Chris Hatton
2
Obwohl dies das OP nicht beantwortet, ist es das, wonach ich gesucht habe.
Elyess Abouda
2
Die richtigste Antwort lautet "es kann nicht gemacht werden". Dies ist der nächste, den Sie bekommen können.
Malnormalulo
2
Charakter ist, aber Char ist nicht.
Pieter De Bie
12

Ein leerer String ist ein Wrapper auf einem char[]ohne Elemente. Sie können eine leere haben char[]. Aber Sie können kein "leer" haben char. Wie andere Primitive muss a chareinen Wert haben.

Sie sagen, Sie möchten "einen Charakter ersetzen, ohne ein Leerzeichen zu lassen".

Wenn Sie es mit a zu tun haben char[], würden Sie ein neues erstellen, char[]wobei dieses Element entfernt wird.

Wenn Sie es mit einem zu tun haben String, würden Sie einen neuen String(String ist unveränderlich) erstellen, bei dem das Zeichen entfernt wird.

Hier sind einige Beispiele, wie Sie ein Zeichen entfernen können:

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

}
Sudocode
quelle
Abgesehen von der Lösung replace () ersetzen die beiden anderen nur das erste Auftreten des Zeichens und nicht alle.
Sactiw
8

Da charsdies als Ganzzahlen (ASCII-Codes) dargestellt werden kann, können Sie einfach schreiben:

char c = 0;

Die 0 im ASCII-Code ist null.

Thomas
quelle
0 als UTF-16-Codeeinheit ( char) ist die vollständige UTF-16-Codierung für den Unicode-Codepunkt U + 0000. Eine Ähnlichkeit mit einem anderen Zeichensatz oder einer anderen Zeichenkodierung ist irrelevant. UTF-16 wird von Java verwendet.
Tom Blodget
6

Wenn Sie ein Zeichen in einem String ersetzen möchten, ohne Leerzeichen zu lassen, können Sie dies mit StringBuilder erreichen. String ist ein unveränderliches Objekt in Java, Sie können es nicht ändern.

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

Das kannst du nicht. "" ist das Literal für eine Zeichenfolge, die keine Zeichen enthält . Es enthält nicht das "leere Zeichen" (was auch immer Sie damit meinen).

jarnbjo
quelle
3

Ich habe danach gesucht. Einfach einstellen char c = 0;und es funktioniert perfekt. Versuch es.

Wenn Sie beispielsweise versuchen, doppelte Zeichen aus einem String zu entfernen, besteht eine Möglichkeit darin, den String in ein char-Array zu konvertieren und in einem Hashset von Zeichen zu speichern, wodurch Duplikate automatisch verhindert werden.

Eine andere Möglichkeit besteht jedoch darin, die Zeichenfolge in ein Zeichen-Array zu konvertieren, zwei for-Schleifen zu verwenden und jedes Zeichen mit dem Rest des Zeichenfolgen- / Zeichen-Arrays zu vergleichen (ein Big O bei N ^ 2-Aktivität) und dann für jedes gefundene Duplikat Setzen Sie das Zeichen einfach auf 0 ..

... und verwenden Sie new String(char[]), um das resultierende char-Array in einen String zu konvertieren und dann sysout zum Drucken (dies ist übrigens alles Java). Sie werden feststellen, dass alle auf Null gesetzten Zeichen einfach nicht vorhanden sind und alle Duplikate verschwunden sind. langer Beitrag, wollte Ihnen aber nur ein Beispiel geben.

Also ja setzen char c = 0;oder wenn für char Array, cArray[i]=0für dieses bestimmte doppelte Zeichen setzen und Sie werden es entfernt haben.

Meka O.
quelle
2

In Java gibt es nichts als leeres Zeichenliteral , mit anderen Worten, '' hat keine Bedeutung im Gegensatz zu "", was ein leeres String-Literal bedeutet

Das nächste, was Sie tun können, um ein leeres Zeichenliteral darzustellen, ist char [] mit der Länge Null, so etwas wie:

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

Wenn Sie auf die String-Klasse verweisen, erstellt der Standardkonstruktor mithilfe von eine leere Zeichenfolge new char[0]

Außerdem ist die Verwendung von Character.MIN_VALUE nicht korrekt, da es sich nicht um ein wirklich leeres Zeichen handelt, sondern um den kleinsten Wert des Typzeichens.

Ich mag es auch nicht Character c = null;als Lösung, hauptsächlich weil jvm NPE auslöst, wenn es versucht, es zu entpacken. Zweitens ist null im Grunde eine Referenz auf nichts für den Referenztyp, und hier handelt es sich um einen primitiven Typ, der null nicht als möglichen Wert akzeptiert.

Angenommen, in der Zeichenfolge, z. B. str, möchte OP alle Vorkommen eines Zeichens, z. B. 'x', durch ein leeres Zeichen '' ersetzen. Versuchen Sie dann Folgendes:

str.replace("x", "");
sactiw
quelle
1

So mache ich es.

char[] myEmptyCharArray = "".toCharArray();
dukekosy
quelle
Das ist kein leerer Charakter. Es ist ein Zeichenarray mit der Länge Null.
Stephen C
1
char ch = Character.MIN_VALUE;

Der obige Code initialisiert die Variable chmit dem Mindestwert, den ein Zeichen haben kann (dh \u0000).

Hüseyin Burhan ÖZKAN
quelle
1

Sie können so etwas tun:

mystring.replace(""+ch, "");
KayV
quelle
0

Sie können nur ein vorhandenes Zeichen wiederverwenden. zB \0Wenn Sie diese in einem String setzen, erhalten Sie einen String mit einem Zeichen in ihm.


Angenommen, Sie möchten eine charsolche, wenn Sie dies tun

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

Was Sie stattdessen tun müssen, ist

String s = 
char ch = MY_NULL_CHAR;
String s2 = ch == MY_NULL_CHAR ? s : s + ch;
assert s.equals(s2);
Peter Lawrey
quelle
1
Was meinen Sie it not worked? Meinst du, es wird nicht kompiliert? In diesem Fall wäre es char ch = '\0';oderchar ch = 0;
Peter Lawrey
@rahulsri Alle Zeichen sind Zeichen und es gibt kein Zeichen, das kein Zeichen ist. Sie müssen herausfinden, was Ihre eigentliche Anforderung ist, und versuchen, sie auf andere Weise zu lösen. Das nulZeichen ist eines der vielen Sonderzeichen, die darauf hinweisen, dass es sich um ein Zeichen handelt, das nicht wirklich vorhanden ist, aber selbst immer noch ein Zeichen ist.
Peter Lawrey
2
"Wenn Gott etwas tun kann, kann Gott dann einen Stein erschaffen, den er nicht heben kann?" Es ist ähnlich der Frage; Können Sie einen Charakter erstellen, der kein Charakter ist?
Peter Lawrey
0

Verwenden Sie den \bOperator (den Backspace-Escape-Operator) im zweiten Parameter

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
Kevin Silva
quelle
xD ... amüsante Dinge ergeben sich, wenn versucht wird, eine so verstümmelte (ja, verstümmelte, zerstörte, entstellte) Zeichenfolge als Teil eines z. B. Dateinamens zu verwenden.
Scre
0

Hey, ich mache immer Methoden für benutzerdefinierte Sachen, die normalerweise nicht in Java implementiert sind. Hier ist eine einfache Methode, die ich zum Entfernen von Zeichen aus String Fast gemacht habe

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

Zur Erläuterung: Ja, es gibt kein Nullzeichen zum Ersetzen, aber Sie können ein solches Zeichen entfernen. Ich weiß, dass es eine alte Frage ist, aber ich poste diese Antwort, weil dieser Code für einige Personen hilfreich sein kann.

Diljeet
quelle