1

私は Twitter クライアントを構築していますが、世界中のトレンドを取得して表示したくありません。これまでのところ (Stack Overflow のおかげで) トレンド情報を取得し、そこから必要な情報を取得して、トレンドをコンソールに投稿できます。トレンドをテーブルに追加しようとすると、最初のトレンドを複数回表示することしかできず、行の作成などでどこが間違っているのかわかりません.

新鮮な目をいただければ幸いです。

ありがとう

public static void WorldWideTrends() {
    Trends WorldWideTrendsList;

    try {

        WorldWideTrendsList = getTrends();
        UI.whatIsDisplayedList.removeAll();
        UI.tweetModel = new DefaultTableModel(10, 1);
        String trendsInfo = WorldWideTrendsList.toString();

        System.out.println(trendsInfo);

        Pattern p = Pattern.compile("(#.*?)\\'", Pattern.DOTALL);
        Matcher matcher = p.matcher(trendsInfo);

        while (matcher.find()) {

            for (int i = 0; i < 10; i++) {
                String output = matcher.group(0);

                System.out.println(output);
                UI.tweetModel.insertRow(1, new Object[] {});
                UI.tweetModel.setValueAt(
                        "<html><body style='width: 400px;'><strong>"
                                + output + "</strong><html><br>", i, 0);
            }
        }

    } catch (TwitterException e) {
        e.printStackTrace();
    }

    UI.whatIsDisplayedList.setModel(UI.tweetModel);

}
4

1 に答える 1

0

これの目的が何であるかわかりません:

while (matcher.find()) {
    for (int i = 0; i < 10; i++) {
       String output = matcher.group(0);
       ...
    }
}

ただし、各一致を 10 回処理します。もう一度コールするだけ.group()では、次の試合に進むことはできません.find()。もう一度コールする必要があります。

for ループを単純に削除するか (ただし、10 回以上の一致が存在する場合、これは 10 回以上一致します)、または while ループを削除して次のようなことを行いたいと思います。

// process the first 10 matches
// no while-loop!
for (int i = 0; i < 10 && matcher.find(); i++) {
   String output = matcher.group(0);
   ...
}
于 2013-03-22T07:42:13.877 に答える