Создание массивов char из элементов массива
Всем доброго времени суток! Имеется метод public static String QuestionsMarks(String str), который принимает в качестве параметра строку, которую вводит пользователь. Строка такого типа: fdshkjha5???6fjshh2???fhjshfs1????6fsfs. Необходимо выяснить какую сумму образуют два числа между ???. Одна из идей это: методом split разбить строку на массив подстрок и уже на основании элементов этого массива создать массивы char Например, есть на входе строка: jkhsd5???6sfsf.
public class Questions_Marks {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
QuestionsMarks(QuestionsMarks(s.nextLine()));
}
public static String QuestionsMarks(String str) {
String [] parts = str.split("\\?\\?\\?");
//System.out.println(Arrays.toString(parts));
for (int i = 0; i<parts.length;i++){
}
return str;
}
}
Разбиваем ее на элементы массива parts. И получаем два элемента массива jkhsd5 и 6sfsf Так вот вопрос: Как создать массивы char из элементов массива parts? Т.е. char [] 1 = {j,k,h,s,d,5} и второй char [] 2 = {6,s,f,s,f}
Или я вообще в дебри ушёл и есть вариант намного легче для решения задачи. Заранее благодарю!
Ответы (2 шт):
Разбейте строку на отдельные символы и поместите каждый из них в массив по порядку. Далее по очереди проверяйте каждую ячейку массива. Если там число - помещайте его в специальную переменную, если нет - идите дальше по массиву. Когда получите два числа, суммируйте их.
Похоже, что настоящая задача состоит не в получении массивов символов, а в том, чтобы суммировать именно целые числа, разделённые ровно тремя знаками вопроса.
Для решения такой задачи проще применить регулярное выражение, чтобы обнаружить пары чисел, подходящие под шаблон "(\\d+)\\?{3}(\\d+)", и найти их сумму (сумму всех подходящих пар).
При этом удобнее воспользоваться потоком совпадений, который можно получить при помощи метода Matcher::results, добавленного, впрочем, только в Java 9.
String str = "fdshkjha5???6fjshh2???fhjshfs1????6fsfs";
int sum = Pattern.compile("(\\d+)\\?{3}(\\d+)").matcher(str)
.results() // Stream<MatchResult>
.mapToInt(mr -> Integer.parseInt(mr.group(1)) + Integer.parseInt(mr.group(2)))
.sum();
System.out.println(sum); // 11
Если критично, чтобы код был совместим именно с Java 8, можно воспользоваться обычным циклом:
String str = "fdshkjha5???6fjshh2???fhjshfs1????6fsfs";
Matcher matcher = Pattern.compile("(\\d+)\\?{3}(\\d+)").matcher(str);
int sum = 0;
while (matcher.find()) {
sum += Integer.parseInt(matcher.group(1)) + Integer.parseInt(matcher.group(2));
}
System.out.println(sum); // 11
Похожий вопрос, связанный с вычислением суммы доходов в строке.