从java中的文件中读取每个字符串文本

时间:2016-02-23 06:37:20

标签: java string file io

我是java的新手。我只是想读取java中的每个字符串并在控制台上打印。

代码:

public static void main(String[] args) throws Exception {

    File file = new File("/Users/OntologyFile.txt");
    try {
        FileInputStream fstream = new FileInputStream(file);
        BufferedReader infile = new BufferedReader(new InputStreamReader(
                fstream));
        String data = new String();
        while ((data = infile.readLine()) != null) { // use if for reading just 1 line
            System.out.println(""+data);
        }
    } catch (IOException e) {
        // Error
    }
}

如果文件包含:

Add label abc to xyz
Add instance cdd to pqr

我想从文件中读取每个单词并将其打印到新行,例如

Add
label
abc
...

之后,我想提取特定字符串的索引,例如获取abc的索引。

有人可以帮助我吗?

5 个答案:

答案 0 :(得分:1)

在打印输出之前,只需添加for-each循环: -

while ((data = infile.readLine()) != null) { // use if for reading just 1 line
  for(String temp : data.split(" "))
  System.out.println(temp); // no need to concatenate the empty string.
}

这将自动打印从文件中读取的每个String行获得的单个字符串。\ / p>

  

之后,我想提取特定字符串的索引   instance获取abc的索引。

我不知道你究竟在谈论什么指数。但是,如果要从正在读取的各行中获取索引,则添加一个初始化为0的临时变量。

将此值增加到d等于abc。喜欢,

int count = 0;
for(String temp : data.split(" ")){
 count++;
 if("abc".equals(temp))
  System.out.println("Index of abc is : "+count);
 System.out.println(temp);
}

答案 1 :(得分:1)

听起来你希望能做两件事:

  1. 打印文件中的所有字词
  2. 搜索特定字词的索引
  3. 在这种情况下,我建议扫描所有行,按任何空格字符(空格,制表符等)拆分并存储在集合中,以便以后可以搜索它。不是问题 - 你能重复吗?在这种情况下你想要打印哪个索引?首先?最后?所有这些?

    假设单词是唯一的,您可以这样做:

    public static void main(String[] args) throws Exception {
    
        File file = new File("/Users/OntologyFile.txt");
        ArrayList<String> words = new ArrayList<String>();
        try {
            FileInputStream fstream = new FileInputStream(file);
            BufferedReader infile = new BufferedReader(new InputStreamReader(
                    fstream));
            String data = null;
            while ((data = infile.readLine()) != null) {
                for (String word : data.split("\\s+") {
                    words.add(word);
                    System.out.println(word);
                }
            }
        } catch (IOException e) {
            // Error
        }
    
        // search for the index of abc:
        for (int i = 0; i < words.size(); i++) {
            if (words.get(i).equals("abc")) {
                 System.out.println("abc index is " + i);
                 break;
            }
        }
    }
    

    如果你不打破,它会打印abc的每个索引(如果单词不是唯一的)。如果单词集非常大,你当然可以更好地优化它,但对于少量数据,这应该足够了。

    当然,如果你提前知道哪些词语&#39;您想要打印的索引,您可以放弃额外的数据结构(ArrayList),只需在扫描文件时打印,除非您希望打印(单词和特定索引)在输出中。

答案 2 :(得分:1)

使用正则表达式String拆分任何空格所收到的\\s+,并使用for循环打印出结果数据。

public static void main(String[] args) {    // Don't make main throw an exception

    File file = new File("/Users/OntologyFile.txt");

    try {
        FileInputStream fstream = new FileInputStream(file);
        BufferedReader infile = new BufferedReader(new InputStreamReader(fstream));

        String data;
        while ((data = infile.readLine()) != null) {
            String[] words = data.split("\\s+");    // Split on whitespace
            for (String word : words) {             // Iterate through info
                System.out.println(word);           // Print it
            }
        }

    } catch (IOException e) {
        // Probably best to actually have this on there
        System.err.println("Error found.");
        e.printStackTrace();
    }
}

答案 3 :(得分:0)

使用Split()中的Class String功能。您可以根据需要进行操作。

使用length关键字在整个中进行迭代 如果任何非字母字符获得substring()并将其写入新行。

答案 4 :(得分:0)

      List<String> words = new ArrayList<String>();
       while ((data = infile.readLine()) != null) { 
           for(String d : data.split(" ")) {
             System.out.println(""+d);
           }
           words.addAll(Arrays.asList(data));   
         }
    //words List will hold all the words. Do words.indexOf("abc") to get index


     if(words.indexOf("abc") < 0) {
        System.out.println("word not present");     
      } else {
       System.out.println("word present at index " + words.indexOf("abc"))
      }