#java #string #for-loop
#java #строка #для цикла
Вопрос:
Мой код принимает первое и последнее слова пользовательского ввода и преобразует их в верхний регистр. Однако, когда пользователь вводит «» или «java» (слово без пробелов), появляется ошибка. Я не смог найти причину ошибки.
Scanner input = new Scanner(System.in);
String s = input.nextLine();
String first = "";
String last = "";
String end = s;
int count = 0;
for (int i = 0;i<s.length()-1;i ) {
if (s.charAt(i) == ' ') {
count ;
}
if (count == 0) {
end = s.toUpperCase();
}
else if (count > 0)
first = s.substring(0,s.indexOf(' '));
last = s.substring(s.lastIndexOf(' ') 1);
end = (first.toUpperCase() " " s.substring(first.length() 1,s.indexOf(last)) " " last.toUpperCase());
}
System.out.println(count);
Комментарии:
1. Я бы напечатал длину s и длину first в вашем предложении else. Я думаю, это, вероятно, скажет вам.
2. Разделите слова с помощью String.split (» «) и сохраните в начальной и конечной строке в соответствии с требованием и преобразуйте ее в верхний регистр.
Ответ №1:
String first = s.substring(0,s.indexOf(' '));
String last = s.substring(s.lastIndexOf(' ') 1);
Ваш код здесь вызывает проблему. Если пробел отсутствует в вашем String
, то indexOf(' ')
вернет -1. Очевидно, что вы не можете использовать подстроку между 0 и -1. Вам нужно проверить, присутствует ли ' '
она в String
подстроке, прежде чем вводить ее.
Комментарии:
1. Я отредактировал его, к сожалению, все еще выдает ошибку. Я уверен, что речь идет о той части, которую вы упомянули, но даже когда я проверяю, она выдает ошибку.
2. Вы делаете то же самое в своей последней строке перед печатью. Похоронен там
s.substring(first.length() 1,s.indexOf(last))
.3. Я должен уточнить, что проблема здесь в том, что
s.indexOf(last)
возвращается ноль иsubstring()
получает строку отstart
доend - 1
, так что конечный индекс становится -1 там.