Эй парни, я пытаюсь использовать Java useDelimiter
метод на он Scanner
класс, чтобы сделать некоторый простой парсинг. В основном каждая строка является записью, разграниченной "|", так например:
2 | John Doe
3 | Jane Doe
4 | Jackie Chan
Метод берет в качестве параметра регулярное выражение, для которого можно соответствовать для. Может кто-то предоставлять мне регулярное выражение, которое соответствовало бы |
(Вертикальная панель, разделенная одним пространством с обеих сторон).
Спасибо, я был бы очень признателен за его!
Я придумал \ s \ | \ s
, который в Java будет выражаться как "\\ s \\ | \\ s "
. Но я не знаю, лучший ли он. Мне не нужно ничего хардкорного, просто то, что работает, и это, кажется, :)
Извините за ответ на мой собственный вопрос, думаю, после того, как я его напечатал, это помогло мне думать.
Вот фрагмент кода, который анализирует строку (или целый файл, Scanner принимает оба варианта) и извлекает номер и имя из каждой строки :
String s =
"1 | Mr John Doe\n" +
"2 | Ms Jane Doe\n" +
"3 | Jackie Chan\n";
Pattern pattern = Pattern.compile("(\\d+) \\| ((\\w|\\s)+)");
Scanner scan = new Scanner(s);
while (scan.findInLine(pattern) != null) {
MatchResult match = scan.match();
// Do whatever appropriate with the results
System.out.printf("N° %d is %s %n", Integer.valueOf(match.group(1)), match.group(2));
if (scan.hasNextLine()) {
scan.nextLine();
}
}
Этот фрагмент кода дает следующий результат:
N° 1 is Mr John Doe
N° 2 is Ms Jane Doe
N° 3 is Jackie Chan
Не забудьте включить * для соответствия повторяющемуся символу
\S*\s*\|\s*[\S\t ]*
Отредактировано...
Вы можете использовать и просто это .*\|.*