Получить подстроку из строки, используя поиск - PullRequest
0 голосов
/ 10 августа 2011

Есть ли быстрый способ поиска строки в другой строке?

У меня есть такой файл:

<br>
Comment EC00: 
<br>
The EC00 is different from EC12 next week. The EC00 much wetter in the very end, which is not seen before.
<br>

<br>

<br>
Comment EC12: 
<br>
The Ec12 of today is reliable. It starts cold, but temp are rising. From Sunday normal temp and wet, except for a strengthening high from SE in the very end.
<br>

Я удалил все <br> и буду искать строку типа «Комментарий EC12:», чтобы получить то, что следует после:

The Ec12 of today is reliable. It starts cold, but temp are rising. From Sunday normal temp and wet, except for a strengthening high from SE in the very end.

Или, может быть, лучше оставить все <br>, чтобы я знал, по крайней мере, где прекратить читать строки ..

P.S. Эти комментарии могут встречаться в документе несколько раз.

EDIT: Я думаю, что это решение было бы хорошо для поиска случаев, по крайней мере, хорошее место для начала .. Это последняя версия, она работает для меня очень хорошо, потому что я знаю, что в HTML будет статичным, а что нет .. Но для тех, кто хотел бы сделать что-то одинаково, вы можете переписать первые два цикла в simmilar путь как последний (вместо 'if', использующего while - переход по строкам текстового файла)

                      StringTokenizer parser = new StringTokenizer(weatherComments);
                      String commentLine = "";
                        String commentWord = "";

                       while (parser.hasMoreTokens()) {
                            if (parser.nextToken().equals("Comment")) {
                                String commentType = parser.nextToken();
                                if (commentType.equals(forecastZone + ":")) {
                                    parser.nextToken(); //first occured <br>
                                    commentWord = parser.nextToken();
                                    while(!commentWord.equals("<br>")){
                                        commentLine += commentWord + " ";
                                        commentWord = parser.nextToken();
                                    }
                                commentLine += "\n";
                                System.out.println(commentLine);
                                }
                            }
                        }

P.P.S. Прежде чем загружать множество библиотек, чтобы ваш код выглядел меньше или чтобы было легче понять, сначала подумайте, как решить его самостоятельно

Ответы [ 3 ]

0 голосов
/ 10 августа 2011

Вы можете попробовать просто использовать indexOf():

String html = ...;
String search = "Comment EC12:";
int comment = html.indexOf(search);
if (comment != -1) {
  int start = comment + search.length();
  int end = start + ...;
  String after = html.substring(start, end);
  ...
}

Проблема в том, чтобы найти конец текста. Поэтому может быть полезно не заменять <br> и разбивать HTML на теги:

String html = ...;
String[] parts = html.split("\\p{Space}*<br>\\p{Space}*")
for (int i = 0; i < parts.length; i += 2) {
  String search = parts[i];
  String after = parts[i + 1];
  System.out.println(search + "\n\t" + after);
}

В примере будет напечатано следующее:

Comment EC00:
    The EC00 is different from EC12 next week. The EC00 much wetter in the very end, which is not seen before.
Comment EC12:
    The Ec12 of today is reliable. It starts cold, but temp are rising. From Sunday normal temp and wet, except for a strengthening high from SE in the very end.
0 голосов
/ 10 августа 2011

В зависимости от того, чего вы хотите достичь, это может быть излишним, но я предлагаю вам использовать автоматный поиск строк в конечном состоянии.Вы можете посмотреть пример на http://en.literateprograms.org/Finite_automaton_string_search_algorithm_%28Java%29.

0 голосов
/ 10 августа 2011

Сначала я удалил бы пустые строки и
, и я бы реализовал алгоритм, подобный BNDM, для поиска или лучше использовал бы библиотеку, подобную StringSearch. С сайта «Высокопроизводительные алгоритмы сопоставления с образцом в Java» http://johannburkard.de/software/stringsearch/

...