#java #arrays #string #character
#java #массивы #строка #символ
Вопрос:
Я новичок в Java, и мне нужно решить упражнение, которое требует следующего:
Для строки, которую вводит пользователь, верните самое большое слово (пока здесь все хорошо)
Но следует учитывать, что числа и символы не являются словами.
Например: Hello, my name is Jonathan and my phone is 0123456789
должно возвращать "Jonathan"
как самое длинное слово.
Пример 2: H3llo W0rld, Java 1s fun!
, должно возвращать "Java"
как самое длинное слово.
В моем псевдокоде я думал о следующем:
A) Запросить ввод от пользователя.
Б) При недопустимом вводе выполняется цикл.
C) Сканируйте входные данные
D) Разделяйте слова пробелами или токенами.
E) Если Word содержит только буквы A-Z amp;amp; a-z, выполните следующий код:
e1) Проверьте, есть ли самое длинное слово, с помощью a for.
e2) Вывести результат
F) еще, если: перейти к следующему слову.
Вот код, который у меня есть на данный момент. Как вы видите, многие части взяты отсюда и адаптированы к коду. «Найти самое длинное в массиве» — популярная тема, но я не могу выполнить проверку на наличие алфавитных символов. Любая помощь будет приветствоваться.
Проблема в том, что я не знаю, как реализовать часть, которая проверяет наличие букв.
Код:
package longestword;
import java.util.Scanner;
public class LongestWord {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter a String: ");
//looping for non empty strings
int largestLength = 0;
String largestWord = "";
String userinput = sc.nextLine();
while (userinput.equals("")) {
System.out.println("Please insert a String: ");
userinput = sc.nextLine();
}
for (String b : userinput.split(" ")) {
if (largestWord.length() == 0) {
largestLength = b.length();
largestWord = b;
} else if (b.length() >= largestLength) {
largestLength = b.length();
largestWord = b;
}
}
sc.close();
System.out.println("Longest Word: " largestWord);
}
public boolean isAlpha(String userinput) {
char[] chars = userinput.toCharArray();
for (char c : chars) {
if (!Character.isLetter(c)) {
return false;
}
}
return true;
}
}
/*
char c = '*';
if( (c >= 'a' amp;amp; c <= 'z') || (c >= 'A' amp;amp; c <= 'Z'))
System.out.println(c " is an alphabet.");
else
System.out.println(c " is not an alphabet.");
}
}
*/
Комментарии:
1. Почему вы не используете свой
isAlpha
метод?2. Я пытаюсь, просто не знал, как это реализовать
Ответ №1:
Просто измените свой isAlpha
метод на static
и используйте его следующим образом:
for (String b : userinput.split(" ")) {
if (isAlpha(b)) {
if (largestWord.length() == 0) {
largestLength = b.length();
largestWord = b;
} else if (b.length() >= largestLength) {
largestLength = b.length();
largestWord = b;
}
}
}
Комментарии:
1. Спасибо! Мне просто нужно поискать, как преобразовать его в Static, но это не должно быть проблемой. Спасибо Eran за вашу помощь! Действительно ценю это :).
2. @jonakru это просто —
public static boolean isAlpha(String userinput) {}...
3. Спасибо Eran за все. Что мне было нужно, так это реализация IsAlpha. Прямо сейчас код не работает должным образом для строки: «asdasd asd4a65sd4a6s5d4a6sd a6s5d4a6s5d4a ssddaassssddddddddd Я получил 3 строки самого длинного слова: asdasd и затем правильный ответ. Исправить это должен я. Спасибо за предоставленную помощь!
4. @jonakru странно — я попробовал этот ввод и получил просто «Самое длинное слово: ssddaassssdddddddddd»
5. Обнаружена ошибка, я не туда поместил «}», который включал System.out.println. Итак, при каждой проверке слова печаталось самое длинное слово на данный момент. Спасибо!!!!!!!!!!!!!!
Ответ №2:
Возможно, более простым подходом могло бы быть разделение строки любым небуквенным символом, и пусть потоки Java сделают тяжелую работу за вас:
String longestWorld =
Arrays.stream(userInput.split("[^a-zA-z]"))
.max(Comparator.comparing(String::length).reversed())
.orElse(null);
Комментарии:
1. Спасибо за ваш ответ. В этом вы, вероятно, правы. Так получилось, что прямо сейчас я нахожусь в начале курса, поэтому от нас ожидается использование циклов For , While, более простых вещей.