Есть текстовый файл со следующим текстом
1. 5600 (Hard)
2. 5800 (Easy)
3. ---
...
15. ---
Прошу обратить внимание, что --- тоже может быть записано в файле как пустой слот. Так же есть ридер
BufferedReader reader = new BufferedReader(new FileReader("src/sample/Leaderboard.txt"));
for(int i = 0; i < 15; i++)
{
string[i] = reader.readLine();
}
reader.close();
Возможно ли потом из String которые мы записали в массив достать 3 разных элемента и как это сделать?
Порядковый номер (int)
Число после точки (int)
String в конце (String)
И записать все в отдельные переменные. Или надо считывать из файла сразу в переменные? Был какой-то способ считывания, когда устанавлиаешь разделитель, до которого (или после которого) ищет текст. Любая помощь бесценна, спасибо !
Подойдут оба варианта !
Во-первых, массив из строк -- это не единственная структура, пригодная для хранения набора строк. Она довольно проста в обращении и работает быстрее других, но в большинстве случаев удобнее использовать более гибкие структуры -- списки. Почитайте где-нибудь о них (и о других коллекциях), напр. в оракловском руководстве или в какой-нибудь русской книжке.
Может быть, вообще нет смысла хранить читаемые строки, а лучше их обрабатывать сразу по мере чтения. Это зависит от ситуации, вам решать.
Во-вторых, для разнообразных манипуляций со строками, таких как поиск по образцу, замена подстроки определенного вида на другую подстроку и прочих, в Java
и в большинстве других языков есть чрезвычайно гибкий инструмент -- регулярные выражения. Про них можно почитать опять же на сайте Oracle или в книжке. Вот я набросал пример того, как можно решить вашу задачу (без ввода из файла, это сами делайте)
package stackoverflow;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Ru_so_922743 {
// Пример данных для проверки рег. выражения -- список со строками
static final List<String> data = new ArrayList<String>() {{
add("1. 5600 (Hard)");
add("2. 5800 (Easy)");
add("3. ---");
add("...");
add("15. ---");
}};
// Регулярное выражение, описывающее образец для разбора строк.
// Ищет непутую группу цифр ( \\d+ ), за которой следует точка (\\.),
// за которой следует отделенная от них пробелами необязательная непустая группа цифр,
// за которой после пробелов следует непустая последовательность любых символов.
// То, что в скобках, помещается в группы, которые нумеруются по порядку:
// 0-я группа -- вся совпавшая с образцом строка, 1-я начинается с первой скобки и т.д.
public static Pattern pattern = Pattern.compile("(\\d+)\\.(\\s+(\\d+))?\\s+(.+)?");
public static void main(String[] args) {
data.forEach(s -> { // Последовательно перебираем строки из списка
Matcher m = pattern.matcher(s); // Применим к строке регулярное выражение
if (m.find()) // Есть совпадение с образцом?
say("Found: '%s', '%s', '%s'",
m.group(1), m.group(3), m.group(4)); // покажем, что нашли
else // Ничего не нашли
say("Nothing found"); // так и скажем
});
}
private static void say(Object s) { System.out.println(s); }
private static void say(String format, Object... data) {
System.out.printf(format + "\n", data);
}
}
Программка выводит следующее:
Found: '1', '5600', '(Hard)'
Found: '2', '5800', '(Easy)'
Found: '3', 'null', '---'
Nothing found
Found: '15', 'null', '---'
Из вашего вопроса не совсем ясно, какие именно группы из строк вам нужно выделять. Разберитесь с регулярными выражениями и исправьте образец как вам надо. В примере результаты разбора просто выводятся на экран, но вы можете с таким же успехом помещать их в какие-то переменные (типа number = m.group(1)
), сохранять их в коллекциях и делать с ними вообще что угодно.
m.group()
возвращает строку, но если вы уверены, что эта строка содержит только цифры (и в разумном количестве), то из такой строки получить int
очень просто: int i = Integer.parseInt(s)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Мне нужна графическая библиотека, в которой можно разместить картинку и нарисовать линию, потому что встроенных адекватных библиотек я не нашёл
Всем приветПри регистрации пользователя ему отправляется email с подтверждением через метод sendActiovationEmail
Вот пример C++ кода, который выглядит очень странноПочему-то, когда данные отсортированы код выполняется почти в шесть раз быстрее
Вопрос из любопытства, почему данные в экземпляре FormData не видны при выводе в консоль, но при этом они видны во вкладке Network? Вывод в консоль...