2016-03-26 6 views
3

Я сделал код, чтобы он задавал пользователю различные вопросы, и если сообщение input.trim().isEmpty() будет передано пользователю и попросит пользователя ввести его снова. Поэтому, если пользователь просто пишет пробелы, сообщение указано. Если пользователь дает несколько пробелов и некоторые символы, он будет принимать.Удалите пробелы и запишите ввод пользователя

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

Так что, если вход:

    katka

Выход:

katka

Другой пример:

katka

Выход:

Katka

Кодекс:

String askWork = input.nextLine(); 

String workplace = askWork.trim().substring(0,1).toUpperCase() 
+ askWork.substring(1); 

в то время как (. AskWork.trim() IsEmpty()) { Строка askWork = input.nextLine();

String workplace = askWork.trim().substring(0,1).toUpperCase() 
+ askWork.substring(1); 

}

Я пробовал различные подходы, но без успеха.

+0

«Если есть пробел, он вообще не будет капитализирован». Вы хотите использовать метод 'trim()' на 'String'. (http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#trim--) –

+2

Вы преобразовываете первый символ в верхний регистр, а затем вы удаляете пробелы. Разве вы не думаете, что это сделало бы гораздо больше смысла сначала удалять пробелы? Тогда вы не захотите (попробуйте) преобразовать пробел в верхний регистр. – Tom

+0

Согласен. Я попробовал askWork.trim(). Substring (0,1) .toUpperCase() + askWork.substring (1); Но я получаю такие ошибки, как исключение в потоке «main» java.lang.StringIndexOutofBoundsException: индекс строки за пределами диапазона: 1 задается, если вход является только пробелом. Однако, если вход содержит символы, он отлично работает. Я не понимаю, почему .. – Ilja

ответ

3

trim() method on String очистит все ведущие и завершающие пробелы. Обрезанный String должен стать вашим новым String, чтобы все индексы, на которые вы ссылаетесь после этого, точны. Вам больше не понадобится replaceAll("\\s",""). Вам также нужна логика для проверки пустого ввода. Для этого вы используете isEmpty() method on String. Я написал игрушку main(), которая продолжает просить слово, а затем заглавная и распечатывает его, как только он ее получит. Это будет тест на пустой вход, вход без символов и т.д.

public static void main(String[] args) throws Exception { 

     BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 

     String askWork = ""; 
     while (askWork.isEmpty()) { 
      System.out.println("Enter a word:"); 
      askWork = input.readLine().trim(); 
     } 

     String workPlace = askWork.substring(0,1).toUpperCase() + askWork.substring(1); 

     System.out.println(workPlace); 
    } 
+0

Спасибо за ваш ответ. Я пробовал ваш код, и он отлично работал, если в нем были символы. Если вход только имел пробелы, мне была предоставлена ​​ошибка: Исключение в потоке «main» java.lang.StringIndexOutofBoundsException: индекс строки за пределами диапазона: 1. Может быть, что-то не так с моим кодом? Я уточню свой вопрос. – Ilja

+0

Переписан для решения этой проблемы. –

+1

спасибо! – Ilja

0

Вам нужно будет обрезать вход, прежде чем начать манипуляции его содержимое:

String askWork = input.nextLine().trim(); 

String workplace = askWork.substring(0,1).toUpperCase() + askWork.substring(1); 
1

Попробуйте зачистка свой вклад, чтобы удалить пробелы, прежде чем пытаться извлечь выгоду из этого.

String askWork = input.nextLine().trim(); 
String capitalized = askWork.substring(0, 1).toUpperCase() + askWork.substring(1) 

Однако, если вход только пробельные, это приведет к IndexOutOfBoundsException, потому что после того, как trim() называется askWork устанавливается в пустую строку ("") и затем вы пытаетесь получить доступ к первому символу пустой (длина 0).

String askWork = input.nextLine().trim(); 
if(askWork.isEmpty()) { 
    // Display error 
    JOptionPane.showMessageDialog(null, "Bad!"); 
else { 
    String capitalized = askWork.substring(0, 1).toUpperCase() + askWork.substring(1) 
    JOptionPane.showMessageDialog(null, "It worked! -- " + capitalized); 
} 
0

Другой раствор без подстрок:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    String askWork = input.nextLine().trim(); 

    while (askWork.isEmpty()) 
     askWork = input.nextLine().trim(); 

    char[] workChars = askWork.toCharArray(); 
    workChars[0] = workChars[0].toUpperCase(); 

    String workplace = String.valueOf(workChars); 

    // Work with workplace 

    input.close(); 
} 
4

Проблема в том, что неиспользованного как все индексы вы ссылаетесь при преобразовании в верхний регистр являются не точный. Итак, сначала оформите() строку, чтобы вы могли очистить все ведущие и завершающие пробелы, а затем заглавные буквы. лучше проверить пустую строку и все пробелы, чтобы избежать исключения.

String askWork = input.nextLine().trim(); 
String capitalized = askWork.substring(0, 1).toUpperCase() + askWork.substring(1)