Строка — один из наиболее часто используемых типов данных в Java. Мы часто используем строки для выполнения множества операций в нашей повседневной разработке. Например, конкатенация строк, усечение, замена и т. д.
В этой статье мы познакомим вас с относительно распространенной и легко упускаемой из виду операцией — удалением пробелов в строках.
На самом деле, есть много разных способов удаления пробелов из строки в Java, например, обрезка, замена всех и т. д. Однако в Java 11 были добавлены некоторые новые функции, такие как strip, stripLeading, stripTrailing и т. д.
В большинстве случаев мы просто используем метод обрезки, чтобы удалить лишние пробелы. Но, похоже, многие об этом не задумывались, а есть ли способ лучше?
Конечно, в большинстве случаев функция trim() прекрасно работает, но в Java существует множество различных методов. Каждый из них имеет свои преимущества и недостатки. Как мы решаем, какой подход лучше для нас?
Далее мы представим несколько методов и сравним их различия, преимущества и недостатки.
Различные способы удаления пробелов из строки в java
Прежде всего, давайте посмотрим, сколько существует методов удаления пробелов из String.Автор суммирует следующие 7 методов, основанных на опыте (методы, которые поставляются с JDK и не включают аналогичные методы в сторонних библиотеках инструментов) ):
- trim() : удалить пробелы в начале и в конце строки.
- strip() : удалить пробелы в начале и в конце строки.
- stripLeading() : удалить пробелы только в начале строки
- stripTrailing() : удалить из строки только конечные пробелы
- replace() : заменить все целевые символы новыми символами
- replaceAll() : заменить все совпадающие символы новыми символами. Этот метод принимает в качестве входных данных регулярное выражение для определения целевой подстроки, которую необходимо заменить.
- replaceFirst(): заменяет только первое вхождение целевой подстроки новой строкой.
Самое главное, что следует отметить, это то, что в JavaСтроковые объекты неизменяемы, что означает, что мы не можем изменить строку, поэтому всеми вышеперечисленными методами мы получаем новую строку.
Далее давайте изучим использование вышеуказанных методов и разберемся с их характеристиками.
PS: код в этой статье использует онлайн-инструменты для запуска (Уууу. Просто doodle.com/online-Java…), потому что на моей тестовой машине не была установлена Java 11, а символы Unicode не были заполнены. Если вы тоже хотите поэкспериментировать, рекомендуется использовать онлайн-инструменты и выбрать соответствующий JDK.
trim
trim() — наиболее распространенный метод, используемый разработчиками Java для удаления пробелов в начале и конце строки. Его использование также относительно просто:
public class StringTest {
public static void main(String[] args) {
String stringWithSpace = " Hollis Is A Java Coder ";
StringTest.trimTest(stringWithSpace);
}
private static void trimTest(String stringWithSpace){
System.out.println("Before trim : \'" + stringWithSpace + "\'");
String stringAfterTrim = stringWithSpace.trim();
System.out.println("After trim : \'" + stringAfterTrim + "\'");
}
}
Выходной результат:
Before trim : ' Hollis Is A Java Coder '
After trim : 'Hollis Is A Java Coder'
Как и выше, после использования обрезки пробелы в начале и конце исходной строки удаляются.
Но я не знаю, задумывались ли вы о том, что содержит пустое содержимое, удаленное методом обрезки? Кроме пробелов есть еще символы?
фактически,Символы пробела, удаляемые обрезкой, относятся к любому символу, значение ASCII которого меньше или равно 32 (' U+0020 '):

Он содержит такие символы, как пробелы, символы новой строки и символы возврата.
strip()
Я не знаю, заметили ли вы,В выпуске Java 11 был добавлен новый метод strip() для удаления начальных и конечных пробелов из строк.
Метод обрезки уже есть, зачем добавлять полоску?
На самом деле это связано с тем, что метод обрезки может удалять только символы, значение ASCII которых меньше или равно 32, ноВ соответствии со стандартом Unicode помимо символов ASCII существует множество других пробельных символов.
И для распознавания этих пробельных символов, начиная с Java 1.5, в класс Character был добавлен новый метод isWhitespace(int). Этот метод использует Unicode для идентификации символов пробела. ты сможешьИмпортный или полиэтиленовый воск. FI/plug-in/space…Узнайте больше о символах пробела Юникода.

Новый метод полосы в Java 11 использует метод Character.isWhitespace(int), чтобы определить, является ли он символом пробела, и удалить его:

Давайте рассмотрим пример использования полосы:
public class StringTest {
public static void main(String args[]) {
String stringWithSpace ='\u2001' + " Hollis Is A Java Coder " + '\u2001';
System.out.println("'" + '\u2001' + "' is space : " + Character.isWhitespace('\u2001'));
StringTest.stripTest(stringWithSpace);
}
private static void stripTest(String stringWithSpace){
System.out.println("Before strip : \'" + stringWithSpace + "\'");
String stringAfterTrim = stringWithSpace.strip();
System.out.println("After strip : \'" + stringAfterTrim + "\'");
}
}
Мы добавили специальный символ \u2001 до и после строки. Этого символа нет в ASCII. Character.isWhitespace определяет, что это пустой символ. Затем используйте полосу для обработки, вывод будет следующим:
' ' is space : true
Before strip : ' Hollis Is A Java Coder '
After strip : 'Hollis Is A Java Coder'
так,Метод полосы в Java 11 более мощный, чем метод обрезки.Он может удалить многие пробельные символы, которых нет в ASCII.Способ оценки - метод Character.isWhitespace.
Разница между методами обрезки и полосы
Выше мы представили два метода, которые могут удалить начало и конец строки, обрезать и обрезать соответственно, а затем сравнить их отличия:
|trim|strip| |---|---| Представлено в Java 1 | Представлено в Java 11 Использование ASCII | Удалить начальные и конечные пробельные символы с использованием значений Unicode | Удалить начальные и конечные пробельные символы Удалить значения ASCII меньше больше или равно символу 'U +0020' или '32' | удалить все символы пробела в соответствии с юникодом
stripLeading() и stripTrailing()
Методы stripLeading() и stripTrailing() также были добавлены в Java 11. Эффект заключается в удалении пробела в начале строки и удалении пробела в конце строки соответственно.
Подобно методу полосы, stripLeading и stripTrailing также используют Character.isWhitespace(int) для идентификации пробельных символов. Использование также похоже на полосу:
public class StringTest {
public static void main(String args[]) {
String stringWithSpace ='\u2001' + " Hollis Is A Java Coder " + '\u2001';
System.out.println("'" + '\u2001' + "' is space : " + Character.isWhitespace('\u2001'));
StringTest.stripLeadingTest(stringWithSpace);
StringTest.stripTrailingTest(stringWithSpace);
}
private static void stripLeadingTest(String stringWithSpace){
System.out.println("Before stripLeading : \'" + stringWithSpace + "\'");
String stringAfterTrim = stringWithSpace.stripLeading();
System.out.println("After stripLeading : \'" + stringAfterTrim + "\'");
}
private static void stripTrailingTest(String stringWithSpace){
System.out.println("Before stripTrailing : \'" + stringWithSpace + "\'");
String stringAfterTrim = stringWithSpace.stripTrailing();
System.out.println("After stripTrailing : \'" + stringAfterTrim + "\'");
}
}
Выходной результат:
' ' is space : true
Before stripLeading : ' Hollis Is A Java Coder '
After stripLeading : 'Hollis Is A Java Coder '
Before stripTrailing : ' Hollis Is A Java Coder '
After stripTrailing : ' Hollis Is A Java Coder'
replace
Для удаления пробельных символов в строке, кроме использования trim и strip, есть еще один способ, то есть использовать метод replace для замены в ней пробельных символов.
replace был добавлен из java 1.5 и может заменить каждую целевую подстроку указанной строкой.
Этот метод заменяет все соответствующие целевые элементы и используется следующим образом:
public class StringTest {
public static void main(String args[]) {
String stringWithSpace =" Hollis Is A Java Coder ";
StringTest.replaceTest(stringWithSpace);
}
private static void replaceTest(String stringWithSpace){
System.out.println("Before replace : \'" + stringWithSpace + "\'");
String stringAfterTrim = stringWithSpace.replace(" ", "");
System.out.println("After replace : \'" + stringAfterTrim + "\'");
}
}
результат:
Before replace : ' Hollis Is A Java Coder '
After replace : 'HollisIsAJavaCoder'
Видно, что с помощью описанного выше метода замены можно заменить все пробельные символы в строке.Важно отметить, что метод replace, как и метод trim, может заменять только символы пробела в ASCII.
replaceAll
replaceAll был добавлен в Java 1.4наиболее мощныйОдин из методов работы со строками в . Мы можем использовать этот метод для многих целей.
Используя метод replaceAll(), мы можем использовать регулярные выражения для определения содержимого целевого символа, которое необходимо заменить. Используя регулярные выражения, вы можете реализовать множество функций, таких как удаление всех пробелов, удаление начальных пробелов, удаление завершающих пробелов и т. д.
Нам просто нужно создать правильное регулярное выражение с правильными параметрами подстановки. Ниже приведены некоторые примеры регулярных выражений:
\s+ 所有的空白字符
^\s+ 字符串开头的所有空白字符
\s+$ 字符串结尾的所有空白字符
Обратите внимание, что в java для добавления/
Мы должны использовать escape-символы, поэтому для\s+
мы должны использовать\\s+
public class StringTest {
public static void main(String args[]) {
String stringWithSpace =" Hollis Is A Java Coder ";
StringTest.replaceAllTest(stringWithSpace," ");
StringTest.replaceAllTest(stringWithSpace,"\\s+");
StringTest.replaceAllTest(stringWithSpace,"^\\s+");
StringTest.replaceAllTest(stringWithSpace,"\\s+$");
}
private static void replaceAllTest(String stringWithSpace,String regex){
System.out.println("Before replaceAll with '"+ regex +"': \'" + stringWithSpace + "\'");
String stringAfterTrim = stringWithSpace.replaceAll(regex, "");
System.out.println("After replaceAll with '"+ regex +"': \'" + stringAfterTrim + "\'");
}
}
результат:
Before replaceAll with ' ': ' Hollis Is A Java Coder '
After replaceAll with ' ': 'HollisIsAJavaCoder'
Before replaceAll with '\s+': ' Hollis Is A Java Coder '
After replaceAll with '\s+': 'HollisIsAJavaCoder'
Before replaceAll with '^\s+': ' Hollis Is A Java Coder '
After replaceAll with '^\s+': 'Hollis Is A Java Coder '
Before replaceAll with '\s+$': ' Hollis Is A Java Coder '
After replaceAll with '\s+$': ' Hollis Is A Java Coder'
Как мы видим, replaceAll() может быть очень мощным, если используется с правильным регулярным выражением.
replaceFirst
Метод replaceFirst также был добавлен в java 1.4, и он заменяет только первое вхождение данного регулярного выражения строкой замены.
Этот метод полезен, если вам нужно заменить только первое вхождение. Например, если нам нужно удалить только начальные пробелы, мы можем использовать\\s+
или^\\s+
.
Мы также можем использовать\\s+$
Регулярные выражения используют этот метод для удаления завершающих пробелов. Потому что это выражение будет соответствовать только последнему пробелу строки. Таким образом, последнее место считается первым совпадением для этого метода.
Давайте возьмем пример удаления начальных и конечных пробелов из строки.
public class StringTest {
public static void main(String args[]) {
String stringWithSpace =" Hollis Is A Java Coder ";
StringTest.replaceFirstTest(stringWithSpace," ");
StringTest.replaceFirstTest(stringWithSpace,"\\s+");
StringTest.replaceFirstTest(stringWithSpace,"^\\s+");
StringTest.replaceFirstTest(stringWithSpace,"\\s+$");
}
private static void replaceFirstTest(String stringWithSpace,String regex){
System.out.println("Before replaceFirst with '"+ regex +"': \'" + stringWithSpace + "\'");
String stringAfterTrim = stringWithSpace.replaceFirst(regex, "");
System.out.println("After replaceFirst with '"+ regex +"': \'" + stringAfterTrim + "\'");
}
}
результат:
Before replaceFirst with ' ': ' Hollis Is A Java Coder '
After replaceFirst with ' ': ' Hollis Is A Java Coder '
Before replaceFirst with '\s+': ' Hollis Is A Java Coder '
After replaceFirst with '\s+': 'Hollis Is A Java Coder '
Before replaceFirst with '^\s+': ' Hollis Is A Java Coder '
After replaceFirst with '^\s+': 'Hollis Is A Java Coder '
Before replaceFirst with '\s+$': ' Hollis Is A Java Coder '
After replaceFirst with '\s+$': ' Hollis Is A Java Coder'
Суммировать
В этой статье описаны 7 способов удаления пробельных символов из строк.
Чтобы напрямую удалить пробелы в начале строки, используйте stripLeading, replaceAll и replaceFirst.
Чтобы напрямую удалить пробелы в конце строки, используйте stripTrailing, replaceAll и replaceFirst.
Чтобы удалить пробелы в начале и в конце строки одновременно, используйте strip, trim
Чтобы удалить все пробельные символы из строки, используйте replace и replaceAll
Новые методы strip, stripTrailing и stripLeading в Java 11 могут удалять больше символов, чем другие методы. Пустые символы, которые он может удалить, не ограничиваются символами в ASCII, но все пустые символы в Unicode. Конкретный метод оценки можно оценить с помощью Character.isWhitespace.