Java Character 클래스에서 빈 문자를 나타내는 방법


126

Java ""에서 String 과 같이 빈 문자를 나타내고 싶습니다 .

그렇게 char ch = an empty character;

사실은 공백을 남기지 않고 문자를 바꾸고 싶습니다.

나는 이것이 의미하는 바를 이해하는 것으로 충분할 것이라고 생각합니다.


2
수행하려는 교체 작업의 예를 보여줍니다.
sudocode

1
@rahulsri 말씀하신 코드를 볼 수 없습니다.
Peter Lawrey 2011

2
나는 영업 이익은 수행하고자하는 생각 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 char 리터럴은 여전히 ​​문자이며 저장 공간을 차지합니다.
Jimmy T.

7
질문은 '문자 없음'을 나타내는 방법을 요구합니다. 널 문자는 많은 상황에서 유용하지만 여전히 그 자체로 문자이므로이 질문에 대한 답이 될 수 없습니다. 이미 user3001에 의해 제공된 정답은 Java의 boxed Character 참조 유형을 사용하고 'no character'가 필요할 때 'null'값을 제공하는 것입니다.
Chris Hatton

2
@AVD 예, rahulsri는 누락 된 문자를 나타내는 방법을 묻습니다. 따라서 null 문자 참조가 적합합니다.
Chris Hatton

97

char정확히 하나의 문자를 의미합니다. 이 유형에는 0 개의 문자를 할당 할 수 없습니다.

이는 String.replace(char, char)길이가 다른 문자열을 반환하는 char 값이 없음을 의미합니다 .


14
사실 3 년 후, 누군가가 마침내 정확하고 완전한 대답을했습니다.
Malnormalulo

이것은 매우 정확한 대답입니다.
Edgar Asatryan 19-06-06

36

Character는 Object에서 파생 된 클래스이므로 null을 "인스턴스"로 할당 할 수 있습니다.

Character myChar = null;

문제 해결됨 ;)


5
이것은 올바른 해결책이며 허용되는 답변이어야합니다.
Chris Hatton

2
이것이 OP에 대한 대답은 아니지만 내가 찾던 것입니다.
Elyess Abouda

2
가장 정답은 "할 수 없다"입니다. 이것은 당신이 얻을 수있는 가장 가까운 것입니다.
Malnormalulo

2
캐릭터는 있지만 char는 아닙니다.
Pieter De Bie

12

빈 문자열은 char[]요소가없는 래퍼입니다 . 비어있을 수 있습니다 char[]. 그러나 당신은 "빈"을 가질 수 없습니다 char. 다른 프리미티브와 마찬가지로 a char는 값을 가져야합니다.

"공백을 남기지 않고 문자를 교체"하고 싶다고합니다.

를 처리하는 경우 해당 요소가 제거 char[]된 새 항목 char[]을 만듭니다 .

를 처리하는 경우 문자가 제거 String된 새 String(String is immutable)를 만듭니다 .

다음은 문자를 제거하는 방법에 대한 몇 가지 샘플입니다.

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 () 솔루션을 제외하고 다른 두 개는 문자의 첫 번째 항목 만 대체하고 전부는 아닙니다.
sactiw

8

chars정수 (ASCII- 코드)로 표현할 수 있듯이 다음과 같이 간단히 작성할 수 있습니다.

char c = 0;

ASCII 코드의 0은 null입니다.


UTF-16 코드 단위 인 0 ( char)은 유니 코드 코드 포인트 U + 0000에 대한 완전한 UTF-16 인코딩입니다. 다른 문자 집합이나 문자 인코딩과의 유사성은 관련이 없습니다. UTF-16은 Java가 사용하는 것입니다.
Tom Blodget

6

빈 공간을 남기지 않고 문자열의 문자를 바꾸려면 StringBuilder를 사용하여이를 수행 할 수 있습니다. 문자열은 Java에서 변경 불가능한 객체이므로 수정할 수 없습니다.

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

3

당신은 할 수 없습니다. ""포함하지 않는 문자열에 대한 리터럴 에는 문자. "빈 문자"(당신이 의미하는 바가 무엇이든)는 포함하지 않습니다.


3

나는 이것을 찾고 있었다. 간단히 설정하면 char c = 0;완벽하게 작동합니다. 시도 해봐.

예를 들어, String에서 중복 문자를 제거하려는 경우 한 가지 방법은 문자열을 char 배열로 변환하고 자동으로 중복을 방지하는 문자의 해시 세트에 저장하는 것입니다.

그러나 또 다른 방법은 문자열을 문자 배열로 변환하고 두 개의 for 루프를 사용하고 각 문자를 나머지 문자열 / 문자 배열 (N ^ 2 활동의 Big O)과 비교 한 다음 발견 된 각 중복에 대해 그 문자를 0으로 설정하십시오 ..

... 그리고 new String(char[])결과 char 배열을 문자열로 변환 한 다음 sysout을 사용하여 인쇄합니다 (모두 java btw 임). 0으로 설정된 모든 문자가 단순히 거기에없고 모든 중복이 사라진 것을 볼 수 있습니다. 긴 게시물이지만 예제를 제공하고 싶었습니다.

그래서 예를 설정 char c = 0;하거나 char 배열의 경우 cArray[i]=0특정 중복 문자에 대해 설정 하면 제거됩니다.


2

자바에서는 빈 문자 리터럴 만큼 아무것도 없습니다. 즉, ''는 빈 문자열 리터럴 을 의미하는 ""와 달리 의미가 없습니다.

빈 문자 리터럴을 나타내는 가장 가까운 방법은 길이가 0 인 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은 기본적으로 아무것도 wrt 참조 유형에 대한 참조이며 여기서는 가능한 값으로 null을 허용하지 않는 기본 유형을 다루고 있습니다.

문자열에서 str이라고 가정하면 OP는 'x'와 같은 모든 문자를 빈 문자 ''로 바꾸고 싶어합니다.

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

1

이것이 내가하는 방법이다.

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

그것은 빈 문자가 아닙니다. 길이가 0 인 문자 배열입니다.
스티븐 C

1
char ch = Character.MIN_VALUE;

위의 코드 ch는 문자가 가질 수있는 최소값 (예 :)으로 변수 를 초기화합니다 \u0000.


1

다음과 같이 할 수 있습니다.

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

0

기존 캐릭터 만 재사용 할 수 있습니다. 예를 들어 \0이것을 문자열에 넣으면 한 문자가있는 문자열이 생깁니다.


당신이 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;
Peter Lawrey dec.

@rahulsri 모든 문자는 문자이며 문자가 아닌 문자는 없습니다. 실제 요구 사항이 무엇인지 파악하고 다른 방식으로 해결해야합니다. nul문자가 전혀 없습니다 자사의 문자를 나타내는 많은 특수 문자 중 하나이지만, 여전히 문자 자체입니다.
Peter Lawrey 2011

2
"신이 무엇이든 할 수 있다면, 그가들 수없는 바위를 만들 수 있습니까?" 질문과 비슷합니다. 캐릭터가 아닌 캐릭터를 만들 수 있습니까?
Peter Lawrey

0

사용 \b두 번째 매개 변수에 연산자 (백 스페이스 이스케이프 연산자)

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 ... 예를 들어 파일 이름의 일부로 이렇게 망가진 (예, 망가진, 망가진, 변형 된) 문자열을 사용하려고하면 재미있는 일이 발생합니다.
Scre

0

Hey 나는 항상 일반적으로 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.