Как представить пустой символ в классе символов Java - PullRequest
97 голосов
/ 16 декабря 2011

Я хочу представить empty character в Java как "" в строке ...

вот так char ch = a empty character;

На самом деле я хочу заменить символ, не оставляя пробела.

Я думаю, может быть достаточно понять, что это значит: no character not even space.

Ответы [ 16 ]

118 голосов
/ 16 декабря 2011

Вы можете назначить '\u0000' (или 0). Для этого используйте Character.MIN_VALUE.

Character ch = Character.MIN_VALUE;
71 голосов
/ 15 июня 2014

char означает ровно один символ.Вы не можете присвоить этому типу ноль символов.

Это означает, что нет значения char, для которого String.replace(char, char) вернул бы строку с различной длиной.

27 голосов
/ 16 декабря 2011

Поскольку Character - это класс, производный от Object, вы можете присвоить null как «instance»:

Character myChar = null;

Проблема решена;)

11 голосов
/ 16 декабря 2011

Пустая строка - это оболочка char[] без элементов. Вы можете иметь пустой char[]. Но вы не можете иметь «пустой» char. Как и другие примитивы, char должен иметь значение.

Вы говорите, что хотите "заменить символ, не оставляя пробела".

Если вы имеете дело с char[], то вы создадите новый char[] с этим удаленным элементом.

Если вы имеете дело с String, то вы должны создать новый String (строка неизменна) с удаленным персонажем.

Вот несколько примеров того, как вы можете удалить символ:

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

}
6 голосов
/ 15 июня 2014

Если вы хотите заменить символ в строке, не оставляя пустого места, вы можете добиться этого с помощью StringBuilder. Строка является неизменным объектом в Java, вы не можете изменить его.

String str = "Hello";
StringBuilder sb = new StringBuilder(str);
sb.deleteCharAt(1); // to replace e character
5 голосов
/ 14 ноября 2017

Поскольку chars может быть представлено как целые числа (ASCII-коды), вы можете просто написать:

char c = 0;

0 в ASCII-коде равно null.

3 голосов
/ 16 декабря 2011

Вы не можете. «» является литералом для строки, которая содержит нет символов. Он не содержит «пустой символ» (что вы подразумеваете под этим).

2 голосов
/ 07 июня 2016

В Java нет ничего, как пустой символьный литерал , другими словами, '' не имеет значения в отличие от "", что означает пустой строковый литерал

Самое близкое, что вы можете сделать для представления пустого символьного литерала, - через символ нулевой длины [], что-то вроде:

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 - это, по сути, ссылка на ничего с ссылочным типом w.r.t, и здесь мы имеем дело с примитивным типом, который не принимает null в качестве возможного значения.

Предполагая, что в строке, скажем, str, OP хочет заменить все вхождения символа, скажем 'x', на пустой символ '', затем попробуйте использовать:

str.replace("x", "");
1 голос
/ 22 сентября 2018

Я искал это.Просто установите char c = 0;, и он отлично работает.Попробуйте.

Например, если вы пытаетесь удалить дублирующиеся символы из строки, одним из способов будет преобразование строки в массив char и сохранение в хэш-наборе символов, что автоматически предотвратит дублирование.

Другим способом, однако, будет преобразование строки в массив char, использование двух циклов for и сравнение каждого символа с остальной частью массива string / char (действие Big O on N ^ 2), а затемдля каждого найденного дубликата просто установите для этого символа значение 0 ..

... и используйте new String(char[]) для преобразования полученного массива символов в строку, а затем выполните sysout для печати (это все, кстати, Java)вы увидите, что все символы, установленные на ноль, просто отсутствуют, а все дубликаты исчезли.длинный пост, но я просто хотел привести вам пример.

так что да, установите char c = 0; или, если для массива char, установите cArray[i]=0 для этого конкретного дублирующего символа, и вы удалите его.

1 голос
/ 24 февраля 2016
char ch = Character.MIN_VALUE;

Приведенный выше код инициализирует переменную ch минимальным значением, которое может иметь символ (т. Е. \u0000).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...