|
分類:[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;
}
}
}
}
|