Java Characterクラスで空の文字を表す方法


126

""文字列のようにJavaで空の文字を表現したい ...

そのように char ch = an empty character;

実はスペースを空けずにキャラを入れ替えたいです。

私はこれが何を意味するかを理解するのに十分かもしれないと思います:文字もスペースもありません。


2
実行する置換操作の例を示します。
sudocode

1
@rahulsri参照しているコードがわかりません。
Peter Lawrey、2011

2
OPもとString.replace(' ', EMPTY_CHARACTER)同じ効果を出したいのではないかと思いますString.replace(" ", "")。つまり、すべてのスペースを削除します。
Roland

回答:


134

割り当てることができます'\u0000'(または0)。このためには、を使用しますCharacter.MIN_VALUE

Character ch = Character.MIN_VALUE;

5
何をない'\0'正確に意味ですか?@AVD
シナモントースト

8
@cinnamontoast- null文字リテラル
adatapost

11
null文字リテラルは依然として文字であり、ストレージ内のスペースを取ります。
ジミーT.

7
この質問では、「文字なし」を表す方法を求めています。null文字は多くの状況で役に立ちますが、それでもそれ自体が文字であるため、この質問に対する答えにはなりません。正しい答えは、すでにuser3001によって指定されており、Javaのボックス化された文字参照タイプを使用して、「文字なし」が必要な場合に「null」値を与えることです。
Chris Hatton 2014

2
@AVDはい、そしてrahulsriは欠けているキャラクターをどのように表すかを尋ねます。したがって、nullの文字参照が適合します。
Chris Hatton 2014

97

char正確に1文字を意味します。このタイプにゼロ文字を割り当てることはできません。

つまりString.replace(char, char)、異なる長さの文字列を返すchar値はありません。


14
事実の3年後、誰かがついに正しく完全な答えを出しました。
Malnormalulo、2015

これは非常に正確な答えです。
Edgar Asatryan

36

CharacterはObjectから派生したクラスなので、「インスタンス」としてnullを割り当てることができます。

Character myChar = null;

問題が解決しました ;)


5
これは正しい解決策であり、受け入れられる答えになるはずです。
Chris Hatton、2014

2
これはOPには応答しませんが、私が探していたものです。
Elyess Abouda 2014年

2
最も正しい答えは「それはできません」です。これはあなたが得ることができる最も近いものです。
Malnormalulo、2015年

2
文字はそうですが、文字はそうではありません。
Pieter De Bie 2017年

12

空の文字列は、char[]要素のないのラッパーです。空にすることができますchar[]。ただし、「空」にすることはできませんchar。他のプリミティブと同様に、aにcharは値が必要です。

「スペースを空けずにキャラクターを入れ替えたい」と言います。

を処理している場合は、その要素を削除してchar[]新しいchar[]を作成します。

を処理している場合は、文字を削除してString新しいString(文字列は不変)を作成します。

次に、charを削除する方法のサンプルをいくつか示します。

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()ソリューションを除いて、他の2つはすべてではなく、最初に出現した文字のみを置き換えます。
sactiw 2017

8

chars整数(ASCII-コード)として表すことができ、あなたは簡単に書くことができます。

char c = 0;

ASCIIコードの0はnullです。


UTF-16コード単位としての0(char)は、UnicodeコードポイントU + 0000の完全なUTF-16エンコーディングです。他の文字セットや文字エンコードとの類似性は関係ありません。UTF-16はJavaが使用するものです。
トムブロジェット2017年

6

空のスペースを残さずに文字列の文字を置き換える場合は、StringBuilderを使用してこれを実現できます。文字列はJavaの不変オブジェクトであり、変更できません。

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

3

できません。""は、文字を含まない文字列のリテラルです。「空の文字」は含まれていません(その意味は何ですか)。


3

これを探していました。設定するだけでchar c = 0;完璧に動作します。それを試してみてください。

たとえば、Stringから重複する文字を削除しようとしている場合、1つの方法は、文字列をchar配列に変換し、重複を自動的に防止する文字のハッシュセットに格納することです。

ただし、別の方法は、文字列をchar配列に変換し、2つのforループを使用して、各文字を残りの文字列/ char配列(N ^ 2アクティビティのBig O)と比較し、重複が見つかった場合その文字を0に設定するだけです。

... new String(char[])結果のchar配列を文字列に変換し、sysoutを出力に使用します(これはすべてjava btwです)。ゼロに設定されたすべての文字が存在せず、すべての重複がなくなっていることがわかります。長い投稿ですが、例を挙げたいだけです。

はいはい、char c = 0;またはchar配列の場合はcArray[i]=0、その特定の重複文字を設定すると、削除されます。


2

Javaでは空の文字リテラルとして何もありません。つまり、「」は空の文字列リテラルを意味する「」とは異なり、意味がありません。

空の文字リテラルを表すのに最も近いのは、長さがゼロのchar []を使用する方法です。

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

Stringクラスを参照する場合、デフォルトのコンストラクターは、以下を使用して空の文字シーケンスを作成します new char[0]

また、Character.MIN_VALUEの使用は、実際には空の文字ではなく、文字型の最小値であるため、正しくありません。

またCharacter c = null;、jvmがボックス化解除しようとするとNPEがスローされるため、ソリューションとしてはあまり好きではありません。第二に、nullは基本的に何も参照型なしへの参照です。ここでは、nullを可能な値として受け入れないプリミティブ型を扱っています。

文字列、たとえばstrで、OPが文字のすべての出現箇所、たとえば 'x'を空の文字 ''に置き換えたいと仮定して、次のように使用します。

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

1

これが私のやり方です。

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

それは空の文字ではありません。長さゼロの文字配列です。
Stephen C


1

あなたはこのようなことをすることができます:

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

0

既存のキャラクターのみ再利用できます。たとえば、\0これを文字列に入れると、1文字の文字列になります。


あなたがするcharときにそのようなことをしたいとします

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

代わりにあなたがしなければならないことは

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

1
どういう意味it not worked?コンパイルできないということですか?その場合には、それは次のようになりますchar ch = '\0';char ch = 0;
ピーターLawrey

@rahulsriすべての文字は文字であり、文字ではない文字はありません。あなたはあなたの本当の要件が何であるかを解明し、それを別の方法で解決しようとする必要があります。nulキャラクターが本当にないそのA文字を示し、多くの特殊文字の一つであるが、それはまだ文字そのものです。
Peter Lawrey、2011

2
「神が何でもできるなら、神は彼が持ち上げることができないとしても岩を作ることができますか?」質問に似ています。キャラクターではないキャラクターを作れますか?
Peter Lawrey、2011

0

使用する\b2番目のパラメータで演算子(バックスペースエスケープ演算子)

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 ...このように破損した(はい、破損した、破損した、変形した)文字列をファイル名の一部として使用しようとすると、面白いことが起こります。
2018年

0

ねえ、いつもJavaで実装されていないカスタムのもののメソッドをいつも作っています。これは、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();
    }

説明のために、はい、置き換えるためのnull文字はありませんが、このように文字を削除できます。私はその古い質問を知っていますが、このコードは一部の人に役立つかもしれないので、この回答を投稿しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.