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

わんくま同盟

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

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


(過去ログ 39 を表示中)
■20138 / )  検索プログラムについて
□投稿者/ 名無し (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;
      }
    }
  }
}

返信 編集キー/


管理者用

- Child Tree -