2015-12-27 6 views
4

Я ищу инструкцию if, чтобы проверить, является ли входная строка пустой или состоит только из пробелов и если не продолжить следующий ввод. Ниже приведен мой код, который дает ошибку при вводе пробела.Проверьте пробелы и пустоты

name = name.trim().substring(0,1).toUpperCase() + name.substring(1).toLowerCase(); 
    if(name != null && !name.isEmpty() && name.contains(" ")) { 
     System.out.println("One"); 
    } else { 
     System.out.println("Two"); 
    } 
+0

@ M.M извините, первый пост. Отредактировано –

+1

Какая ошибка возникает при вводе пробела? – Engineero

+0

@Engineero Исключение в потоке «main» java.lang.StringIndexOutOfBoundsException: Индекс строки за пределами диапазона: 1 –

ответ

1

Я бы написал это как следующее.

name = name == null ? "" : name.trim(); 
if(name.isEmpty()) { 
    System.out.println("Null, empty, or white space only name received"); 
} else { 
    System.out.println("Name with at least length one received"); 
    name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase(); 
} 
+0

Спасибо большое, заработал с этим, а также очень полезный ответ. –

5

Причина это дает ошибку в том, что облицовка() удаляет все начальные и конечные пробела [отредактированные], так, то ваша строка пуста. В этот момент вы вызываете подстроку (0,1), поэтому она будет вне диапазона.

+0

Чтобы быть четкой, отделка() удаляет ведущее белое пространство, а не только задние. В настоящее время получена ошибка, если нет хотя бы одного символа без пробела. –

+0

@GeorgeMulligan Okey, есть ли более умный способ сделать это? Я читал здесь разные посты и объединил их, но пока не понял хорошего пути. Kinda new для java –

0

Я думаю, если вы хотите использовать только методы String, тогда вам понадобится matches(regex), возможно, более одного.

Я не проверял это, но он может работать ...

String emptyOrAllWhiteSpace = "^[ \t]*$"; 
if (name == null || name.matches(emptyOrAllWhiteSpace)) { 
    // first thing. 
} else { 
    // second thing. 
} 

Есть альтернативы в библиотеке Apache Commons Lang - StringUtils.isEmpty(CharSequence), StringUtils.isWhitespace(CharSequence).

У Гуавы есть еще один помощник Strings.isNullOrEmpty() который вы можете использовать.

+0

Я получаю сообщение об ошибке: Невозможно вызывать совпадения (String) в примитивном типе null –

+0

Существует также библиотека StringUtils.isBlank Apache Commons Lang, которая фактически проверяет пробелы, пустые ("") или нулевые. – Thomas

+0

@Thomas Okey, я импортирую java.lang.Object.org.apache.commons.lang.StringUtils –