C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 検索プログラムについて


(過去ログ 39 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■20138 / inTopicNo.1)  検索プログラムについて
  
□投稿者/ 名無し (1回)-(2008/06/06(Fri) 14:55:08)

分類:[Java] 

javaで、クラス名がいろいろ書かれたテキストファイルからclass名を
検索して表示できるプログラムなのですが、以下のソースではコマンドラインで
入力されたクラス名の全文一致検索しかできないので
(LinkedListと入力すると、Linked.classしか検索して表示されない)
部分一致検索に切り替えたいのですが、何かいい方法はないでしょうか。


import java.io.*;
import java.util.*;;
public class TextKensaku{
  static String keyExtract(String line){
    int idx = line.lastIndexOf('/');
    if(idx == -1){
      return null;
    }else{
      return line.substring(idx + 1);
    }
  }
  static int putLinesToHashtable
    (String inFileName, Hashtable<String, LinkedList<String>> ht){
    int putCount = 0;
    try{
      BufferedReader br1 =
        new BufferedReader(new FileReader(inFileName));
      while(true){
        String line = br1.readLine();
        if(line == null){
          break;
        }else{
          String key = keyExtract(line);
          if(key != null){
            LinkedList<String> orgVal = ht.get(key);
            if(orgVal != null){
              orgVal.add(line);
              ht.put(key, orgVal);
              putCount++;
            }else{
              LinkedList<String> newVal = new LinkedList<String>();
              newVal.add(line);
              ht.put(key, newVal);
              putCount++;
            }
          }
        }
      }
      br1.close();
    }catch(IOException e){
      System.out.println("Catching " + e);
    }
    return putCount;
  }
  public static void main(String args[]){
    Hashtable<String, LinkedList<String>> ht1
      = new Hashtable<String, LinkedList<String>>();
    int count = putLinesToHashtable(args[0], ht1);
    System.out.println("count = " + count);
    BufferedReader rd =
      new BufferedReader(new InputStreamReader(System.in));
    while(true){
      try{
        System.out.print( "What class? (for quit: just type `return'):");
        String className = rd.readLine();
        if(className.length() == 0){
          break;
        }
        String key = className + ".class";
        LinkedList<String> entries = ht1.get(key);
        if(entries != null){
          System.out.println("** Number of entries = " + entries.size());
          System.out.println(entries);
        }else{
          System.out.println( className +" is not found.");
        }
      }catch(IOException e){
        System.out.println( "Catching " + e);
        return;
      }
    }
  }
}

引用返信 編集キー/
■20140 / inTopicNo.2)  Re[1]: 検索プログラムについて
□投稿者/ 凪瀬 (53回)-(2008/06/06(Fri) 15:44:50)
凪瀬 さんの Web サイト
No20138 (名無し さん) に返信
> (LinkedListと入力すると、Linked.classしか検索して表示されない)
「LinkedList.class」かな?

> 入力されたクラス名の全文一致検索しかできないので
> 部分一致検索に切り替えたいのですが、何かいい方法はないでしょうか。

パフォーマンス抜きに単純にやるならば、Map#entrySet()でEntryを取得して、
ループですべてのEntryのキーと部分一致するかを正規表現なりでチェックするということになるでしょうか。

クラス名をキーにMapからgetするのに比べたらパフォーマンスは落ちますが、
たかだか数百とか程度のオーダーのデータなら問題にならないんじゃないかな。

引用返信 編集キー/
■20182 / inTopicNo.3)  Re[2]: 検索プログラムについて
□投稿者/ 名無し (2回)-(2008/06/07(Sat) 09:51:19)
No20140 (凪瀬 さん) に返信
> ■No20138 (名無し さん) に返信
>>(LinkedListと入力すると、Linked.classしか検索して表示されない)
> 「LinkedList.class」かな?
>
>>入力されたクラス名の全文一致検索しかできないので
>>部分一致検索に切り替えたいのですが、何かいい方法はないでしょうか。
>
> パフォーマンス抜きに単純にやるならば、Map#entrySet()でEntryを取得して、
> ループですべてのEntryのキーと部分一致するかを正規表現なりでチェックするということになるでしょうか。
>
> クラス名をキーにMapからgetするのに比べたらパフォーマンスは落ちますが、
> たかだか数百とか程度のオーダーのデータなら問題にならないんじゃないかな。
>
解決済み
引用返信 編集キー/
■20259 / inTopicNo.4)  Re[3]: 検索プログラムについて
□投稿者/ 倉田 有大 (269回)-(2008/06/08(Sun) 21:26:32)
No20182 (名無し さん) に返信
> ■No20140 (凪瀬 さん) に返信
>>■No20138 (名無し さん) に返信
> >>(LinkedListと入力すると、Linked.classしか検索して表示されない)
>>「LinkedList.class」かな?
>>
> >>入力されたクラス名の全文一致検索しかできないので
> >>部分一致検索に切り替えたいのですが、何かいい方法はないでしょうか。
>>
>>パフォーマンス抜きに単純にやるならば、Map#entrySet()でEntryを取得して、
>>ループですべてのEntryのキーと部分一致するかを正規表現なりでチェックするということになるでしょうか。
>>
>>クラス名をキーにMapからgetするのに比べたらパフォーマンスは落ちますが、
>>たかだか数百とか程度のオーダーのデータなら問題にならないんじゃないかな。
>>

この引用だけ返信は失礼とおもうのですが、わたしだけかいな。
解決済み
引用返信 編集キー/
■20260 / inTopicNo.5)  Re[4]: 検索プログラムについて
□投稿者/ 中博俊@管理人 (1回)-(2008/06/08(Sun) 22:14:39)
中博俊@管理人 さんの Web サイト
そういう指摘はなしにしてください。おねがいします。
解決済み
引用返信 編集キー/
■20261 / inTopicNo.6)  Re[5]: 検索プログラムについて
□投稿者/ 倉田 有大 (270回)-(2008/06/08(Sun) 23:51:44)
No20260 (中博俊@管理人 さん) に返信
> そういう指摘はなしにしてください。おねがいします。

指摘しないほうがよいのでしょうか?
とりあえず了解しました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -