Я хочу проверить, что Java String или символьный массив не состоит только из пробелов, используя Java?
Это очень похожий вопрос, за исключением Javascript:
Как я могу проверить, содержит ли строка символы и пробелы, а не только пробелы?
РЕДАКТИРОВАТЬ : я удалил бит об алфавитно-цифровых символах, поэтому он имеет больше смысла.
java
string
whitespace
Анкур
источник
источник
String.isBlank
API для того же.Ответы:
Кратчайшее решение, которое я могу придумать:
Это проверяет только наличие (не) пробелов. Если вы хотите проверить определенные классы символов, вам нужно использовать могущество
match()
с регулярным выражением, например:... который проверяет наличие хотя бы одного буквенно-цифрового символа (ASCII).
источник
matches()
: для производительности я обычно хранюPattern
в файлеfinal static
. Окупается, если один и тот же код запускается часто.null
не строка!"Я бы использовал библиотеку Apache Commons Lang. У него есть класс StringUtils, который полезен для всех видов операций над String. Чтобы проверить, состоит ли строка не только из пробелов, вы можете использовать следующее:
Вот ссылка: StringUtils.isBlank
источник
StringUtils.isEmpty
теперь вернет false, если вы передадите "".Немного короче, чем то, что сказал Карл Смотриц:
источник
https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isBlank-java.lang.CharSequence-
источник
Если вы используете Java 11 , вам
isBlank
пригодится новый строковый метод:Если вы используете Java 8, 9 или 10 , вы можете создать простой поток, чтобы проверить, не является ли строка только пробелом:
Помимо того, что не требуются какие-либо сторонние библиотеки, такие как Apache Commons Lang, эти решения имеют преимущество обработки любого символа пробела, а не только простых
' '
пробелов, как было быtrim
решение на основе, предложенное во многих других ответах. Вы можете обратиться к Javadocs для получения исчерпывающего списка всех поддерживаемых типов пробелов. Обратите внимание, что пустые строки также охватываются в обоих случаях.источник
Обратите внимание на использование символа обратной косой черты cap-S, что означает "непробельный символ".
Держу пари, что это простейшее (и, возможно, самое быстрое?) Решение.
источник
String year="1995"; year.matches("\\S"); will return false
Значит, это неправильное решение. : |В этом ответе больше внимания уделяется примечанию « т.е. есть хотя бы один буквенно-цифровой символ ». Кроме того, это не добавляет слишком много к другому (более раннему) решению, за исключением того, что это не повредит вам с NPE в случае, если String
null
.Нам нужно,
false
если (1) s равноnull
или (2) s пусто, или (3) s содержит только белые символы.источник
Если вы проверяете только пробелы и не заботитесь о null, вы можете использовать org.apache.commons.lang.StringUtils.isWhitespace (String str),
StringUtils.isWhitespace(String str);
(Проверяет, содержит ли строка только пробелы.)
Если вы также хотите проверить значение null (включая пробелы), тогда
источник
С Java-11 + вы можете использовать
String.isBlank
API, чтобы проверить, не состоит ли вся данная строка из пробелов -Javadoc для того же:
источник
Вам подойдет метод обрезки.
http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/String.html#trim ()
Вы можете обрезать, а затем сравнить с пустой строкой или, возможно, проверить длину на 0.
источник
Альтернатива:
источник
trim () и другие упомянутые регулярные выражения не работают для всех типов пробелов
т.е.: символ Юникода "СТРОКА РАЗДЕЛИТЕЛЬ" http://www.fileformat.info/info/unicode/char/2028/index.htm
Функции Java Character.isWhitespace () охватывают все ситуации.
Поэтому следует использовать уже упомянутое решение StringUtils.isWhitespace (String) / или StringUtils.isBlank (String) .
источник
проверит: - это ноль - это только пробел - это пустая строка ""
https://www.programcreek.com/java-api-examples/?class=com.mysql.jdbc.StringUtils&method=isEmptyOrWhitespaceOnly
источник
Просто сравнение производительности на openjdk 13, Windows 10. Для каждого из этих текстов:
выполнил один из следующих тестов:
каждые 10.000.000 раз.
Результаты:
Удивительно, но трим + пустой - самый быстрый. Даже если ему нужно построить обрезанный текст. Еще быстрее, чем простой цикл for, ищущий один единственный символ без пробелов ...
РЕДАКТИРОВАТЬ: чем длиннее текст, тем больше различаются числа. Обрезка длинного текста занимает больше времени, чем простой цикл. Однако регулярные выражения по-прежнему являются самым медленным решением.
источник
Хотя лично я бы предпочел
!str.isBlank()
, как уже предлагали другие (илиstr -> !str.isBlank()
в качестве предиката), более современная и эффективная версияstr.trim()
упомянутого выше подхода будет использоватьstr.strip()
- рассматривая нули как "пробелы":Например, как Predicate, для использования с потоками, например, в модульном тесте:
источник