← Назад к вопросам
Удаление пробелов из строки без replace()
1.3 Junior🔥 111 комментариев
#Soft Skills и карьера
Условие
Напишите Java-программу для удаления всех пробелов из строки без использования методов replace(), replaceAll() или других встроенных методов замены.
Пример
Входные данные: "Hello World Java"
Выходные данные: "HelloWorldJava"
Требования
- Нельзя использовать String.replace()
- Нельзя использовать String.replaceAll()
- Нельзя использовать регулярные выражения
- Можно использовать StringBuilder или массив символов
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Подход
Проходим по строке символ за символом, добавляя в StringBuilder только те символы, которые не являются пробелами. Используем StringBuilder для эффективного конкатенирования.
Решение
public class SpaceRemover {
/**
* Метод 1: Использование StringBuilder
* Самый эффективный способ.
*/
public static String removeSpacesWithStringBuilder(String str) {
if (str == null || str.isEmpty()) {
return str;
}
StringBuilder result = new StringBuilder();
for (char c : str.toCharArray()) {
if (c != ' ') {
result.append(c);
}
}
return result.toString();
}
/**
* Метод 2: Использование цикла и конкатенации (неэффективно)
*/
public static String removeSpacesWithConcat(String str) {
if (str == null || str.isEmpty()) {
return str;
}
String result = "";
for (char c : str.toCharArray()) {
if (c != ' ') {
result += c;
}
}
return result;
}
/**
* Метод 3: Использование цикла с индексом и массивом char
*/
public static String removeSpacesWithCharArray(String str) {
if (str == null || str.isEmpty()) {
return str;
}
char[] chars = str.toCharArray();
char[] result = new char[chars.length];
int index = 0;
for (char c : chars) {
if (c != ' ') {
result[index++] = c;
}
}
return new String(result, 0, index);
}
/**
* Метод 4: Использование Stream API (Java 8+)
*/
public static String removeSpacesWithStream(String str) {
if (str == null || str.isEmpty()) {
return str;
}
return str.chars()
.filter(c -> c != ' ')
.collect(StringBuilder::new,
(sb, c) -> sb.append((char)c),
StringBuilder::append)
.toString();
}
/**
* Вспомогательный метод для проверки всех вариантов
*/
public static void testRemoveSpaces(String input) {
System.out.println("Входная строка: \"" + input + "\"");
System.out.println("Результат (StringBuilder): \"" + removeSpacesWithStringBuilder(input) + "\"");
System.out.println("Результат (Concat): \"" + removeSpacesWithConcat(input) + "\"");
System.out.println("Результат (CharArray): \"" + removeSpacesWithCharArray(input) + "\"");
System.out.println("Результат (Stream): \"" + removeSpacesWithStream(input) + "\"");
System.out.println();
}
public static void main(String[] args) {
System.out.println("=== Удаление пробелов из строки ===\n");
// Пример из задания
testRemoveSpaces("Hello World Java");
// Ожидаемо: HelloWorldJava
// Пример с множественными пробелами
testRemoveSpaces("Java is great");
// Ожидаемо: Javaaisgreat
// Пример с пробелами в начале и конце
testRemoveSpaces(" Hello ");
// Ожидаемо: Hello
// Пример с табуляцией (если требуется)
testRemoveSpaces("Hello\tWorld");
// Ожидаемо: HelloWorld или Hello\tWorld (в зависимости от требований)
// Пустая строка
System.out.println("Пустая строка: \"" + removeSpacesWithStringBuilder("") + "\"");
// Null значение
System.out.println("Null значение: " + removeSpacesWithStringBuilder(null));
// Только пробелы
System.out.println("Только пробелы: \"" + removeSpacesWithStringBuilder(" ") + "\"");
// Нет пробелов
System.out.println("Нет пробелов: \"" + removeSpacesWithStringBuilder("HelloWorld") + "\"");
}
}
Сложность
- Временная сложность: O(n), где n - длина строки
- Пространственная сложность: O(m), где m - длина результата (без пробелов)
Примеры и тест-кейсы
- "Hello World Java" -> "HelloWorldJava"
- "Java is great" -> "Javaaisgreat"
- " Hello " -> "Hello"
- "" -> "" (пустая)
- "HelloWorld" -> "HelloWorld" (нет изменений)
- " " -> "" (только пробелы)
Edge cases и типичные ошибки
- Null значение: Проверяем перед началом
- Пустая строка: Возвращаем пустую строку
- Множественные пробелы: Все удаляются
- Табуляция (\t): Если требуется, нужно отдельно обработать
- Новые строки (\n): Аналогично табуляции
- Конкатенация строк: О(n^2) сложность в цикле - используйте StringBuilder
- Performance: StringBuilder - O(n), конкатенация в цикле - O(n^2)
StringBuilder - лучший выбор для этой задачи благодаря O(n) сложности.