2012-03-21 3 views
0

Я в настоящее время функция getBetween так:getBetween две строки на определенной странице?

public static String getBetween(String haystack, String pre, String post) { 
    Pattern pattern = Pattern.compile(pre+"(.+?)"+post); 
    Matcher matcher = pattern.matcher(haystack); 
    if(matcher.find()) 
     return haystack.substring(matcher.start(1),matcher.end(1)); 
    return "No match could be found."; 
} 

И когда я пытаюсь getBetween две строки, которые имеют «с в них, он не будет работать

как:.

System.out.println(getBetween(strHTML, "href="/objects.phtml?type=inventory">", "</a> <span style="font-weight: normal;">"));

Есть ли какой-либо способ для синтаксического анализа двух строк, чтобы он работал с "s и все еще beable для работы с getBetween()?

+0

Используйте парсер для разбора HTML – Adrian

+0

Есть ли что-то в Java, которая не является третьей стороной, которая может это сделать? Я не привык к сложным Java-вещам:/ – user1176922

+0

Вы можете попробовать indexOf() и substring(), оба являются частью String. Тем не менее это может потерпеть неудачу и, конечно, медленно, но попробовать. – Adrian

ответ

0

попробовать что-то вроде этого:

int startIndex = haystack.indexOf(pre); 
// handle the case where startIndex is -1 
int endIndex = haystack.indexOf(startIndex, post); 
// handle the case where endIndex is -1 
return haystack.substring(startIndex, endIndex) 
+0

» Я получаю сообщение об ошибке. – user1176922

+0

Не могли бы вы высказать свой код? – Behrang

+0

Это в OP :) – user1176922

1

Если я вас правильно понял, вы хотите где-то в середине strHTML быть распечатаны? Проблема заключается в ваших и post, которые компилируются, я думаю, что html имеет другое значение, чем тот, что в Java-шаблоне. Поэтому вам нужно будет процитировать их.

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 


public class GetBetween 
{ 

    public static String getBetween(String haystack, String pre, String post) 
    { 
     Pattern pattern = Pattern.compile(Pattern.quote(pre) + "(.+?)" + Pattern.quote(post)); 
     Matcher matcher = pattern.matcher(haystack); 

     if (matcher.find()) 
     { 
      return haystack.substring(matcher.start(1),matcher.end(1)); 
     } 

     return "No match could be found."; 
    } 


    /** 
    * @param args 
    */ 
    public static void main(String[] args) 
    { 
     String strHTML = "href=\"/objects.phtml?type=inventory\">\"s</a><span style=\"font-weight: normal;\">"; 

     System.out.println(getBetween(strHTML, "href=\"/objects.phtml?type=inventory\">", "</a><span style=\"font-weight: normal;\">")); 

     strHTML = "href=\"/objects.phtml?type=inventory\"></a><span style=\"font-weight: normal;\">"; 

     System.out.println(getBetween(strHTML, "href=\"/objects.phtml?type=inventory\">", "</a><span style=\"font-weight: normal;\">")); 
    } 

} 
Смежные вопросы