如何在具有一定长度的文本文件中查找第一个字符串?

时间:2014-02-20 14:24:05

标签: java

我目前正在尝试编写一个循环文本文件的程序,以查找长度超过9个字符的第一个单词。

我原本以为我首先需要得到一个完整的单词所以要做到这一点我应该使用for循环迭代文件中的每个项目,将其添加为currentWord变量。

其次,有了这个单词/ String,我会做第二步 - 比较它的长度和目标('THRESHOLD')长度为9.如果它更大,那么我找到了第一个单词长度大于或等于10,并将在句子中返回。否则,循环将继续迭代?

这是我到目前为止所做的:

    // Write a program that finds the first word in Alice In Wonderland
// that is longer than a given number of characters.

import java.util.Scanner;
import java.io.FileReader;
import java.io.FileNotFoundException;

public class LearningLoops {
public static void main(String[] args) throws java.io.FileNotFoundException
    {
        Scanner in = new Scanner(new FileReader("aliceInWonderland.txt"));
    String longWord = "";
    boolean found = false;
    final int THRESHOLD = 9;
    int i;
    String currentWord; 

    for (i = 0; in.charAt(i) != " "; i++)  {
        currentWord = currentWord + i;
        i++;
    }

    while (in != null)  {
        if (currentWord.length() > THRESHOLD) {
            longWord = currentWord; 
        }
    System.out.println("The first long word is: " + longWord);    
        }
    }
}

这是正确的做法吗?我被困住了,所以不胜感激。

6 个答案:

答案 0 :(得分:3)

一个非常简单的解决方案是这样的:

BufferedReader br = new BufferedReader(new FileReader("aliceInWonderland.txt"));
String line;
while ((line = br.readLine()) != null) {
    String[] words = line.split(" ");
    for (String word : words) {
        if (word.length() >= 9) {
            return word;
        }
    }
}

答案 1 :(得分:1)

改变你的方法。做:

  1. 使用FileReader / Scanner和/或BufferdReader逐行阅读文件。
  2. trim()每行从文件中读取。
  3. 现在根据空格分割线条 - \\s+
  4. 遍历数组,对于split数组中的每个String,检查长度。如果长度>阈值,将String添加到List /数组。如果不,什么都不做。
  5. 对文本文件的所有行执行此操作。

答案 2 :(得分:0)

你有两个循环;一个for循环和一个while循环。

在两个循环中执行任务并不罕见 - 可能一次循环以收集信息,然后另一个循环来处理该信息。但是,您尝试执行的任务可以在一个循环中完成。

考虑如何手动执行此操作:

  1. 读一个字
  2. 如果该字符合您的需要,请停止并报告该字词。
  3. 否则转到第1步
  4. 所以在你的程序中,首先设置循环中需要的东西,然后根据需要编写循环。

    这是一个循环。实际上它是一个while循环 - 你回到第一步,而你还没找到合适的词。

     while(word.length < TARGET_LENGTH) {
         word = ... // get next word
     }
    

    看起来您知道Scanner可能有用,但是虽然您创建了一个,但您永远不会使用它。 Read the documentation for Scanner和一些与问题相关的方法会跳出来。也许你应该尝试编写一个打印出第一个单词或前两个单词的程序,然后继续处理循环。

答案 3 :(得分:0)

您错误地使用了Scanner对象。它扫描搜索令牌的数据(参见其API

这里有一个使用扫描仪的例子,但是还有其他选项显示(将线条分成单词)。我不喜欢生成这么多String对象,但这是一个问题或意见)

public static void main(String[] args) throws java.io.FileNotFoundException {

    Scanner in = new Scanner(new FileReader("aliceInWonderland.txt"));
    in.useDelimiter("^\\w"); //any character which is not a letter or number or _
    while (in.hasNext()) {
        String s=in.next();
        if (s.length>=9) {
            System.out.println("The first long word is: " +s);
            break;
        }
    }
}

答案 4 :(得分:0)

我会选择BufferedReader,逐行读取文件,在空格上拆分行并返回符合条件的第一个标记。

public static void main(String[] args) throws FileNotFoundException, IOException {
    File file = new File("aliceInWonderland.txt");
    int threshold = 9;

    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
    String line;

    while ((line = br.readLine()) != null) {
        String[] tokens = line.split("\\s+");
        for (String token : tokens) {
            if (token.length() > threshold) {
                System.out.println("The first long word is: " + token);
                return;
            }
        }
    }
    br.close();
}

答案 5 :(得分:0)

您可以使用BufferedReader类来提高性能。请执行以下操作:

public static String getLongest() throws IOException{
    BufferedReader reader = new BufferedReader(new FileReader("aliceInWonderland.txt"));
    final int THRESHOLD = 9;
    String line = "";
    while((line = reader.readLine()) != null) {
        String[] arr = line.split("\\s+");
        for(String word: arr) {
            System.out.println(word);
            if(word.length() > THRESHOLD) {
                return word;
            }
        }
    }
    return null;
}