Я читаю файл с таким шаблоном: (section1, section2, section3) ...
Но формат не гарантируется, а это значит, что я должен обрабатывать случаи как один раздел на отдельных строках, много секций на одной строке. И мне также нужно сохранить смещение каждого токена. Так я бег кода, как это, используя Искатель, потому что это дает коррекции и жетоны:Матчи в java, поведение сопряжения в цикле while?
`define a global matcher
while() {
readSection1(matcher, other parameters);
readSection2(matcher, other parameters);
readSection3(matcher, other parameters);
}
Вы можете видеть, что я пытаюсь передать этот Искатель, так что я могу начать оттуда, где я остановился. Но теперь у меня проблема. После того, как мой последний метод readSection3 закончился, я проверил, что мой помощник не попал в цель, поэтому я начал новый раунд чтения. Однако, когда я снова вошел в цикл while и передал матчи методу readSection1, помощник внезапно попал в конец! Почему это произойдет?
Я также запустить небольшой тест:
String loop = "a b c d e f g h i j k l";
Matcher loopMatcher = Pattern.compile("\\S+").matcher(loop);
boolean loopEnded = false;
while (!loopEnded) {
use(loopMatcher);
if (loopMatcher.hitEnd()) {
loopEnded = true;
}
}
public static void use(Matcher matcher) {
if (!matcher.find()) {
System.out.println("loop not ended but matcher hit end");
}
}
печатает сообщение об ошибке тоже. Зачем?!
Хорошо, странно, сейчас я снова запускаю эту маленькую программу, ошибка ушла, но она все еще в моей большой программе.
Возможно, я не очень хорошо объяснил это. Я фактически работаю на линиях с помощью сканера, на самом деле нет класса Section. И шаблон S1, S2, S3, S1, S2, S3 ... Когда мой readSection3() заканчивается, я должен перейти в следующий цикл и прочитать следующий S1, если он есть. Поэтому, если последний S3 и следующий S1 находятся в одной строке, мне нужно будет начать с того места, где я остановился. Вот почему я передаю свой Matcher, потому что он должен был остаться на последнем знаке последнего S3. И когда я перехожу в следующий цикл и вызываю readSection1(), я вызываю matcher.find(), что Matcher должен найти следующий токен, который принадлежит разделу1. – HM9527
Вы правы, что в моем коде есть опечатка, теперь она должна бежать. Но подождите, я пытаюсь запустить его снова, и теперь все хорошо ????? Что я только что исправил с помощью глобального Matcher !!! Что я трачу на то, чтобы исправить это, если он зафиксировал себя после 40 минут ???? – HM9527
Однако, если я не использую фиксированную версию, моя другая программа по-прежнему идет не так ... Хм, позвольте мне пройти через это снова. – HM9527