1

次のような XML 解析済みテキストがいくつかありました。

06:00 Vesti<br>07:15 Something Else<br>09:10 Movie<a href="..."> ... <br>15:45 Something..

そしてたくさんありました..

さて、私はこれをしました:

String mim =ses.replaceAll("(?s)\\<.*?\\>", " \n");

テキストをうまく表示する方法は他にありませんでした。さて、いくつかのショーの後、しばらくして、同じテキストを次のような文字列に分割する必要があります。

06:00 Vesti   

... また

07:15 Something Else

私はこのようなことを試しましたが、うまくいきません:

char[] rast = description.toCharArray();
    int brojac = 0;
    for(int q=0; q<description.length(); q++){
        if(rast[q]=='\\' && rast[q+1]=='n' ) brojac++;
    }
    String[] niz = new String[brojac];

    int bf1=0;
    int bf2=0;
    int bf3=0;
    int oo=0;

    for(int q=0; q<description.length(); q++){
        if(rast[q]=='\\'&& rast[q+1]=='n'){
            bf3=bf1;
            bf1=q;

            String lol = description.substring(bf3, bf1);
            niz[oo]=lol;
            oo++;
        }
    }

私は description.substring(bf3,bf1) が本来あるべきように設定されていないことを知っていますが、これは次のように思います:

if(rast[q]=='\\' && rast[q+1]=='n) 

そのようには機能しません..他の解決策はありますか?

ノート。そのリソースを取得する他の方法はありません。、 これを通してでなければなりません。

4

2 に答える 2

1

を呼び出すと、が \nHtml.fromHtml(String)に適切に変換されます。<br>

String html = "06:00 Vesti<br>07:15 Something Else<br>09:10 Movie<a href=\"...\"> ... <br>15:45 Something..";
String str = Html.fromHtml(html).toString();
String[] arr = str.split("\n");

次に、それを行ごとに分割するだけです-正規表現は必要ありません(最初のケースでHTMLを解析するために使用するべきではありません)。

編集:すべてを束にDate変える

// Used to find the HH:mm, in case the input is wonky
Pattern p = Pattern.compile("([0-2][0-9]:[0-5][0-9])");
SimpleDateFormat fmt = new SimpleDateFormat("HH:mm");
SortedMap<Date, String> programs = new TreeMap<Date, String>();
for (String row : arr) {
    Matcher m = p.matcher(row);
    if (m.find()) {
        // We found a time in this row
        ParsePosition pp = new ParsePosition(m.start(0));
        Date when = fmt.parse(row, pp);
        String title = row.substring(pp.getIndex()).trim();
        programs.put(when, title);
    }
}
// Now programs contain the sorted list of programs. Unfortunately, since
// SimpleDateFormat is stupid, they're all placed back in 1970 :-D.
// This would give you an ordered printout of all programs *AFTER* 08:00
Date filter = fmt.parse("08:00");
SortedMap<Date, String> after0800 = programs.tailMap(filter);
// Since this is a SortedMap, after0800.values() will return the program names in order.
// You can also iterate over each entry like so:
for (Map.Entry<Date,String> program : after0800.entrySet()) {
    // You can use the SimpleDateFormat to pretty-print the HH:mm again.
    System.out.println("When:" + fmt.format(program.getKey()));
    System.out.println("Title:" + program.getValue());            
}
于 2012-08-16T13:41:59.177 に答える
0

正規表現を使用:

List<String> results = new ArrayList<String>(); 

Pattern pattern = Pattern.compile("(\d+:\d+ \w+)<?");
Matcher matcher = pattern.matcher("06:00 Vesti<br>07:15 Something Else<br>09:10 Movie<a href="..."> ... <br>15:45 Something..");

while(matcher.find()) {
    results.add(matcher.group(0));
}

results文字列のリストとして終了します。

results = List[
    "06:00 Vesti", 
    "07:15 Something Else", 
    "09:10 Movie", 
    "15:45 Something.."]

javas正規表現ライブラリがどのように機能するかについては、Rexgex Java チュートリアルを参照してください。

于 2012-08-16T13:26:24.363 に答える