Java 使用搜索从字符串中检索子字符串

Java 使用搜索从字符串中检索子字符串,java,html,string,pattern-matching,Java,Html,String,Pattern Matching,有没有一种快速的方法来搜索另一个字符串中的字符串 我有这样一个文件: <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 o

有没有一种快速的方法来搜索另一个字符串中的字符串

我有这样一个文件:

<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>
或者,最好把所有的

都留下,这样我至少可以知道在哪里停止阅读这些行

注意:这些注释可能在文档中多次出现

编辑: 我认为这个解决方案可以找到发生的情况,至少是一个好的开始。。 这是最后一个版本,对我来说效果非常好,因为我知道HTML中的哪些是静态的,哪些不是。。但是对于那些想做类似事情的人,你可以用类似的方式重写前两个循环作为最后一个循环(而不是在文本文件的行中使用if)

StringTokenizer解析器=新的StringTokenizer(weatherComments);
字符串commentLine=“”;
字符串commentWord=“”;
while(parser.hasMoreTokens()){
if(parser.nextToken().equals(“注释”)){
String commentType=parser.nextToken();
if(commentType.equals(forecastZone+“:”)){
parser.nextToken();//第一次出现
commentWord=parser.nextToken(); 而(!commentWord.equals(
)){ commentLine+=commentWord+“”; commentWord=parser.nextToken(); } commentLine+=“\n”; System.out.println(注释行); } } }
p.p.S。
在下载大量库以使您的代码看起来更小或更容易理解之前,请先考虑如何自己解决它

首先,我将删除空行和
,然后我将实现一个类似BNDM的算法以进行搜索,或者更好地使用类似StringSearch的库。从“Java中的高性能模式匹配算法”网站上,您可以尝试简单地使用
indexOf()

问题是找到课文的结尾。因此,不替换

并拆分标记上的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);
}

根据您想要实现的目标,这可能有点过分,但我建议您使用有限状态自动机字符串搜索。您可以在上查看一个示例。

也许它很好,但如果格式总是与上面的文件一样简单,我不喜欢使用外部库来完成如此小的任务。您可以删除
和空行,然后在每一行中搜索注释。如果你找到了评论,那么就看下一行。是的,我想是的,但问题是评论可以在几行中传播。。在这种情况下,我需要标记来至少确保一条注释何时结束,另一条注释何时开始..或者阅读该行直到找到下一条注释的标题或EOF我是否可以通过这种方式仅获取第一次出现的注释?(第一部分)那么这是一个很好的解决方案,但我需要的是在一行的末尾:Comment EC00:然后开始阅读其余部分(Comment)。所以我使用StringTokenizer以另一种方式做了这件事,所以我逐字逐句地阅读,这很有帮助
                      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);
                                }
                            }
                        }
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);
  ...
}
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.