0

「paddington road」のような文字列がいくつかあり、この文字列から「road」という単語を抽出する必要があります。どうやってやるの?

問題は、通りのリストを処理し、「道路」「公園」「通り」「大通り」などの単語を抽出する必要があることです。

それを行うための最良の方法は何ですか?複雑さは O(n*m) で、私が 5000 以上の道路を処理していることを考えると、パフォーマンスは非常に重要です。

Postgres db から値を抽出して List に入れていますが、それが最善の方法かどうかはわかりません。ハッシュ テーブルの方がクエリが高速である可能性があります。

私はこのようなことを試しました:

    // Parse selectedList
    Iterator<String> it = streets.iterator();
    Iterator<String> it_exception = exception.iterator();

    int counter = streets.size();
    while(it.hasNext()) {   

        while ( it_exception.hasNext() ) {
            // remove substring it_exception.next() from it.next()              
        }               
    }

どう思いますか?

4

3 に答える 3

1

あなたが試すことができますSet

Set<String> exceptions = new HashSet<String>(...);
for (String street : streets) {
    String[] words = street.split(" ");
    StringBuilder res = new StringBuilder();
    for (String word : words) {
        if (!exceptions.contains(word)) {
            res.append(word).append(" ");
        }
    } 
    System.out.println(res);
}

複雑さは O(n) になると思います。ここで、n は通りにあるすべての単語の数です。

于 2012-01-11T22:45:52.280 に答える
1

外側のループの反復ごとに、キーワード リストの新しい反復子を取得する必要があります。最も簡単な方法は、foreach 構文を使用することです。

for (String streetName : streets) {
    for (String keyword : keywords) {
        // find if the string contains the keyword, and perhaps break if found to avoid searching for the other keywords
    }
}

事前最適化しないでください。5000 はコンピューターにとっては意味がなく、通りの名前は短い文字列です。また、最も頻繁に使用するキーワード (大通りではなく通り) をキーワード リストの先頭に配置すると、反復回数が少なくなります。

于 2012-01-11T22:41:44.323 に答える
1
List streets = new ArrayList<String>();
    streets.add("paddington road");
    streets.add("paddington park");

    for (Object object : streets) {
        String cmpstring = object.toString();
        String[] abc = cmpstring.split(" ");
        String secondwrd = abc[1];
        System.out.println("secondwrd"+secondwrd);

    }

secondwrd をリストまたは文字列バッファなどに保持できます....

于 2012-01-11T22:58:22.030 に答える