Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Txt文件中搜索字符串_Java_String - Fatal编程技术网

Java 在Txt文件中搜索字符串

Java 在Txt文件中搜索字符串,java,string,Java,String,我们在课堂上编写了这段代码,我在理解/操作它时遇到了困难。我想修改它,这样它将接受用户输入,而不是搜索整个文件,并打印出单词在文件中的位置 import java.io.BufferedReader; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Inpu

我们在课堂上编写了这段代码,我在理解/操作它时遇到了困难。我想修改它,这样它将接受用户输入,而不是搜索整个文件,并打印出单词在文件中的位置

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.Map.Entry;

public class Assingment7 {

    public Map<String, Integer> getWordCount(String fileName){

        FileInputStream fis = null;
        DataInputStream dis = null;
        BufferedReader br = null;
        Map<String, Integer> wordMap = new HashMap<String, Integer>();
        try {
            fis = new FileInputStream(fileName);
            dis = new DataInputStream(fis);
            br = new BufferedReader(new InputStreamReader(dis));
            String line = null;
            while((line = br.readLine()) != null){
                StringTokenizer st = new StringTokenizer(line, " ");
                while(st.hasMoreTokens()){
                    String tmp = st.nextToken().toLowerCase();
                    if(wordMap.containsKey(tmp)){
                        wordMap.put(tmp, wordMap.get(tmp)+1);
                    } else {
                        wordMap.put(tmp, 1);
                    }
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try{if(br != null) br.close();}catch(Exception ex){}
        }
        return wordMap;
    }

    public List<Entry<String, Integer>> sortByValue(Map<String, Integer> wordMap){

        Set<Entry<String, Integer>> set = wordMap.entrySet();
        List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
        Collections.sort( list, new Comparator<Map.Entry<String, Integer>>()
        {
            public int compare( Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2 )
            {
                return (o2.getValue()).compareTo( o1.getValue() );
            }
        } );
        return list;
    }

    public static void main(String a[]){
        Assingment7 mdc = new Assingment7();
        Map<String, Integer> wordMap = mdc.getWordCount("C://fox.txt");
        List<Entry<String, Integer>> list = mdc.sortByValue(wordMap);
        for(Map.Entry<String, Integer> entry:list){
            System.out.println(entry.getKey()+" ==== "+entry.getValue());
        }
    }
}
导入java.io.BufferedReader;
导入java.io.DataInputStream;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入java.util.Set;
导入java.util.StringTokenizer;
导入java.util.Map.Entry;
公共课助理7{
公共映射getWordCount(字符串文件名){
FileInputStream fis=null;
DataInputStream dis=null;
BufferedReader br=null;
Map wordMap=newhashmap();
试一试{
fis=新文件输入流(文件名);
dis=新数据输入流(fis);
br=新的BufferedReader(新的InputStreamReader(dis));
字符串行=null;
而((line=br.readLine())!=null){
StringTokenizer st=新的StringTokenizer(行“”);
而(st.hasMoreTokens()){
字符串tmp=st.nextToken().toLowerCase();
if(wordMap.containsKey(tmp)){
wordMap.put(tmp,wordMap.get(tmp)+1);
}否则{
wordMap.put(tmp,1);
}
}
}
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
尝试{if(br!=null)br.close();}catch(Exception ex){}
}
返回wordMap;
}
公共列表sortByValue(映射wordMap){
Set=wordMap.entrySet();
列表=新的ArrayList(集合);
Collections.sort(list,newcomparator()
{
公共整数比较(映射项o1,映射项o2)
{
return(o2.getValue()).compareTo(o1.getValue());
}
} );
退货清单;
}
公共静态void main(字符串a[]{
Assingment7 mdc=新Assingment7();
Map wordMap=mdc.getWordCount(“C://fox.txt”);
List=mdc.sortByValue(wordMap);
用于(映射条目:列表){
System.out.println(entry.getKey()+“=”+entry.getValue());
}
}
}

有什么想法吗?

您可以将main方法更改为类似这样的方式-用户在控制台中输入要搜索的字符串,如果在地图中找到该键,它将输出与该键相关的值

public static void main(String a[]) {
    Assingment7 mdc = new Assingment7();
    Map<String, Integer> wordMap = mdc.getWordCount("C://fox.txt");
    List<Entry<String, Integer>> list = mdc.sortByValue(wordMap);

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String input = null;

    try {
      input = br.readLine();
    } catch (IOException e) {
      System.out.println(e.getMessage());
    }

    for(Map.Entry<String, Integer> entry:list) {
        if(entry.getKey().equalsIgnoreCase(input)){
            System.out.println(entry.getKey() + " ==== " + entry.getValue());
        }
    }
}
publicstaticvoidmain(字符串a[]){
Assingment7 mdc=新Assingment7();
Map wordMap=mdc.getWordCount(“C://fox.txt”);
List=mdc.sortByValue(wordMap);
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
字符串输入=null;
试一试{
输入=br.readLine();
}捕获(IOE异常){
System.out.println(e.getMessage());
}
用于(映射条目:列表){
if(entry.getKey().equalsIgnoreCase(输入)){
System.out.println(entry.getKey()+“=”+entry.getValue());
}
}
}

您想要行号、字号、段落号或任何关于单词位置的特定信息吗?我想打印出使用单词的行,无需DataInputStream。使用Java7的好例子请尝试使用参考资料,您只需要一个FileReader和一个BufferedReader。不管怎么说,除了逐行读取文件的方法外,不需要其他任何东西,可以将该方法更改为在找到单词时返回带有行号的int(如果找不到,则返回-1)。我如何更改该方法以输出使用用户输入单词的行?文件中可能会多次出现该单词,但是您可以更改Map对象,这样除了与每个输入关联一个字符串和整数外,它还保存找到每个单词的行号?