16 Вопрос: Как представить пустой символ в классе символов Java

вопрос создан в Tue, Feb 5, 2013 12:00 AM

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

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

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

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

    
95
  1. Что вы подразумеваете под этим?
    2011-12-16 12: 33: 30Z
  2. Показывает пример операции замены, которую вы хотите выполнить.
    2011-12-16 12: 53: 59Z
  3. @ rahulsri Я не вижу код, на который вы ссылаетесь.
    2011-12-16 13: 09: 48Z
  4. Я думаю, что OP хочет выполнить String.replace(' ', EMPTY_CHARACTER), чтобы иметь тот же эффект, что и String.replace(" ", ""). Т.е. удалить все пробелы.
    2017-03-13 07: 45: 13Z
16 ответов                              16                         

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

Character ch = Character.MIN_VALUE;
    
117
2016-04-25 14: 37: 59Z
  1. Что именно означает '\0'? @AVD
    2012-12-28 03: 29: 57Z
  2. @ cinnamontoast - это литерал null char
    2012-12-28 03: 43: 09Z
  3. Пустой символьный литерал все еще является символом и занимает место в памяти.
    2014-06-15 13: 50: 07Z
  4. Вопрос требует способа представления «без символов». Хотя нулевой символ полезен во многих ситуациях, он по-прежнему является самостоятельным символом, поэтому не может быть ответом на этот вопрос. Правильный ответ, уже предоставленный user3001, состоит в том, чтобы использовать ссылочный тип Java в штучной упаковке для символов и присвоить ему значение «ноль», когда «никакой символ» не требуется.
    2014-08-02 03: 24: 15Z
  5. @ AVD Да, и rahulsri спрашивает, как представить отсутствующий символ. Так что нулевая ссылка на символ подходит.
    2014-08-03 00: 08: 26Z

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

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

    
69
2014-06-15 13: 52: 44Z
  1. Через три года после этого кто-то наконец дал правильный и полный ответ.
    2015-02-16 15: 57: 25Z
  2. Это очень точный ответ.
    2019-06-06 14: 46: 13Z

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

Character myChar = null;

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

    
27
2014-10-06 10: 01: 27Z
  1. Это правильное решение, и оно должно быть принятым ответом.
    2014-08-02 03: 20: 55Z
  2. Хотя это не отвечает на OP, это то, что я искал.
    2014-10-06 08: 38: 05Z
  3. НАИБОЛЕЕ правильный ответ: «это невозможно сделать». Это самое близкое, что вы можете получить.
    2015-01-26 15: 20: 53Z
  4. Символ есть, но символ нет.
    2017-01-17 12: 02: 00Z

Пустая строка - это оболочка 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);

}
    
11
2011-12-16 13: 18: 45Z
  1. Помимо решения replace (), другие два заменят только первое вхождение символа, а не все.
    2017-12-28 11: 25: 16Z

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

String str = "Hello";
StringBuilder sb = new StringBuilder(str);
sb.deleteCharAt(1); // to replace e character
    
6
2014-06-15 13: 47: 04Z

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

char c = 0;

0 в ASCII-коде - null.

    
5
2017-11-14 19: 02: 41Z
  1. 0 в качестве единицы кода UTF-16 (char) - это полное кодирование UTF-16 для кодовой точки Unicode U + 0000. Любое сходство с каким-либо другим набором символов или кодировкой символов не имеет значения. UTF-16 - это то, что использует Java.
    2017-11-14 20: 28: 57Z

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

    
3
2011-12-16 12: 44: 31Z

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

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

str.replace("x", "");
    
2
2017-12-28 11: 20: 15Z

Вот как я это делаю.

char[] myEmptyCharArray = "".toCharArray();
    
1
2015-11-03 22: 12: 55Z
char ch = Character.MIN_VALUE;

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

    
1
2016-02-24 14: 10: 56Z

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

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

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

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

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

    
1
2018-09-22 19: 50: 51Z

Вы можете повторно использовать только существующего персонажа. например \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);
    
0
2011-12-16 13: 07: 06Z
  1. @ Lawrey Я пробовал Char ch = '\0', но это не сработало ..
    2011-12-16 12: 42: 10Z
  2. Что вы имеете в виду it not worked? Вы имеете в виду, что он не компилируется? В этом случае это будет char ch = '\0'; или char ch = 0;
    2011-12-16 12: 44: 59Z
  3. @ rahulsri Все символы являются символами, и нет символа, который не является символом. Вы neВыясните, каково ваше реальное требование, и попробуйте решить его по-другому. Символ nul - это один из множества специальных символов, который указывает на его символ, которого на самом деле нет, но он сам по-прежнему является символом.
    2011-12-16 13: 03: 44Z
  4. "Если бог может сделать что-нибудь, может ли бог создать камень, даже если он не может поднять?" Это похоже на вопрос; Можете ли вы создать персонажа, который не является персонажем?
    2011-12-16 13: 08: 54Z

Используйте оператор \b (оператор выхода из backspace) во втором параметре

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
    
0
2015-07-29 07: 20: 31Z
  1. xD ... забавные вещи получатся, если попытаться использовать искаженную (да, искалеченную, искалеченную) строку как часть, например, имя файла.
    2018-10-26 18: 45: 08Z

Эй, я всегда делаю методы для пользовательских вещей, которые обычно не реализуются в 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();
    }

Для пояснения: да, для замены нет нулевого символа, но вы можете удалить такой символ, как этот. Я знаю, это старый вопрос, но я публикую этот ответ, потому что этот код может быть полезен для некоторых людей.

    
0
2018-01-20 14: 57: 22Z

Неправильно:

String.replace('T', '') ;

Правильно:

String.replace("T", "");
    
0
2018-08-02 07: 10: 30Z

Вы можете сделать что-то вроде этого:

mystring.replace(""+ch, "");
    
0
2018-09-20 12: 15: 10Z
источник размещен Вот