Как я могу проверить, что строка Java не все пробелы? - PullRequest
118 голосов
/ 14 июля 2010

Я хочу проверить, что строка Java или массив символов не просто состоят из пробелов, используя Java?

Это очень похожий вопрос, за исключением его Javascript:
Какможно проверить, содержит ли строка символы и пробел, а не только пробел?

РЕДАКТИРОВАТЬ : я удалил бит из буквенно-цифровых символов, поэтомуимеет больше смысла.

Ответы [ 13 ]

205 голосов
/ 14 июля 2010

Самое короткое решение, которое я могу придумать:

if (string.trim().length() > 0) ...

Это проверяет только наличие (не) пробелов.Если вы хотите проверить наличие определенных классов символов, вам нужно использовать могущественный match() с регулярным выражением, например:

if (string.matches(".*\\w.*")) ...

..., который проверяет хотя бы один (ASCII) буквенно-цифровой символ.

54 голосов
/ 14 июля 2010

Я бы использовал библиотеку Apache Commons Lang.У него есть класс StringUtils, который полезен для всех видов операций String.Для проверки того, что строка не содержит все пробелы, вы можете использовать следующее:

StringUtils.isBlank(<your string>)

Вот ссылка: StringUtils.isBlank

44 голосов
/ 07 апреля 2011

Немного короче того, что упоминал Карл Смотриц:

!string.trim().isEmpty();
19 голосов
/ 14 июля 2010
5 голосов
/ 28 мая 2011
if(target.matches("\\S")) 
    // then string contains at least one non-whitespace character

Обратите внимание на использование обратной косой черты cap-S, что означает "непробельный символ"

Держу пари, что это самое простое (и, возможно, самое быстрое?) Решение.

4 голосов
/ 14 июля 2010

В этом ответе больше внимания уделяется sidenote " т.е. имеет хотя бы один буквенно-цифровой символ ".Кроме того, он не добавляет слишком много к другому (более раннему) решению, за исключением того, что он не повредит вам с NPE в случае, если String равен null.

Мы хотим false, если (1) s равно null или (2) s пусто или (3) s содержит только белые символы.

public static boolean containsNonWhitespaceChar(String s) {
  return !((s == null) || "".equals(s.trim()));
}
3 голосов
/ 09 сентября 2016

Если вы проверяете только пробелы и не заботитесь о пустых значениях, вы можете использовать org.apache.commons.lang.StringUtils.isWhitespace (String str),

StringUtils.isWhitespace(String str);

(Проверяет, содержит ли строка только пробелы.)

Если вы также хотите проверить наличие нуля (включая пробелы), тогда

StringUtils.isBlank(String str);
2 голосов
/ 05 мая 2018

Если вы используете Java 11 , вам пригодится новый isBlank строковый метод:

!s.isBlank();

Если вы используете Java 8, 9 или 10, вы можете создать простой поток, чтобы проверить, что строка не является только пробелами:

!s.chars().allMatch(Character::isWhitespace));

В дополнение к тому, что не требуется никаких сторонних библиотек, таких как Apache Commons Lang, эти решения имеют преимуществообработки любого символа пробела, а не только простых ' ' пробелов, как было бы предложено решение на основе trim, предложенное во многих других ответах.Вы можете обратиться к Javadocs для исчерпывающего списка всех поддерживаемых типов пробелов.Обратите внимание, что пустые строки также охватываются в обоих случаях.

1 голос
/ 31 мая 2018

С JDK / 11 теперь вы можете использовать API String.isBlank, чтобы проверить, не вся ли заданная строка состоит из

String str1 = "    ";
System.out.println(str1.isBlank()); // made up of all whitespaces, prints true

String str2 = "    a";
System.out.println(str2.isBlank()); // prints false

Javadoc дляТо же самое:

/**
 * Returns {@code true} if the string is empty or contains only
 * {@link Character#isWhitespace(int) white space} codepoints,
 * otherwise {@code false}.
 *
 * @return {@code true} if the string is empty or contains only
 *         {@link Character#isWhitespace(int) white space} codepoints,
 *         otherwise {@code false}
 *
 * @since 11
 */
public boolean isBlank()
1 голос
/ 14 июля 2010

Метод обрезки должен отлично работать для вас.

http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/String.html#trim()

Возвращает копию строки с ведущие и конечные пробелы опущено. Если этот объект String представляет пустой символ последовательность, или первый и последний символы последовательности символов представлен этим объектом String как иметь коды больше, чем '\ u0020' ( пробел), затем ссылка на этот объект String возвращается.

В противном случае, если нет символа с кодом больше, чем '\ u0020' в строка, затем новый объект String представляющий пустую строку создано и возвращено.

В противном случае, пусть k будет индексом первый символ в строке которого код больше, чем '\ u0020', и пусть м будет индекс последнего символа в строке, код которой больше чем «\ u0020». Новый объект String создан, представляющий подстроку эта строка, которая начинается с символ с индексом k и заканчивается символ с индексом м-то есть результат этой строки (k, m + 1).

Этот метод может быть использован для обрезки пробелы от начала и до конца строки; на самом деле это урезает все Управляющие символы ASCII.

Возвращает: копия этой строки с ведущий и конечный пробел удаляется или эта строка, если она не имеет начальные или конечные пробелы. начальные или конечные пробелы.

Вы можете обрезать, а затем сравнить с пустой строкой или, возможно, проверить длину на 0.

...