搜索字符串仅打印出没有附加字符的搜索

时间:2015-10-13 18:23:49

标签: java string search text

我是java的新手,我正在开发一个项目。我正在尝试搜索文本文件中的几个4个字符的首字母缩略词。它只会显示或输出只有4个字符而没有别的。如果有一个空格或附加的其他角色将无法显示它...我试图让它显示整行,但还没有成功。

文本文件的内容:

APLM
APLM12345
ABC0
ABC0123456
CSQV
CSQVABCDE
ZIAU
ZIAUABCDE

控制台中的输出:

APLM
ABC0
CSQV
ZIAU

我的代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;

public class searchPdfText
{
public static void main(String args[]) throws Exception
{
    int tokencount;
    FileReader fr = new FileReader("TextSearchTest.txt");
    BufferedReader br = new BufferedReader(fr);

    String s = "";
    int linecount = 0;
    ArrayList<String> keywordList = new ArrayList<String>(Arrays.asList("APLM",  "ABC0", "CSQV",  "ZIAU" ));

    String line;
    while ((s = br.readLine()) != null)
    {
        String[] lineWordList = s.split(" ");
        for (String word : lineWordList)
        {
            if (keywordList.contains(word))
            {
                System.out.println(s);

                break;
            }
        }
    }
}
}

2 个答案:

答案 0 :(得分:1)

您只需更改所需输出的while代码:

while ((s = br.readLine()) != null) {
    if (s.length() == 4){
        System.out.println(s);
    }
}

如果您只想要4个特定值,只需创建一个方法来检查它:

public static boolean hasIt(String text){
    String [] list = { "APLM",  "ABC0", "CSQV",  "ZIAU" };
    for ( String s : list ){
        if (s.equals(text)){
            return true;
        }
    }
    return false;
}

您的while

while ((s = br.readLine()) != null) {
    if (hasIt(s)){
        System.out.println(s);
    }
}

答案 1 :(得分:1)

如果你看一下ArrayList.contains的文档,你会发现只有当你的关键字包含你文件中提供的字符串时它才会返回true。因此,当您的代码仅输出keywordList中为这些提供的字符串找到的完全匹配时,您的代码是正确的。

相反,如果你想在提供的字符串的一部分包含关键字时获得匹配,请考虑迭代输入并以相反的方式匹配它:

while ((s = br.readLine()) != null) {
    String[] lineWordList = s.split(" ");
    for (String word : lineWordList) {
        // JAVA 8
        keywordList.stream().filter(e -> word.contains(e)).findFirst()
                .ifPresent(e -> System.out.println(word));

        // JAVA <8
        for (String keyword : keywordList) {
            if (word.contains(keyword)) {
                System.out.println(s);
                break;
            }
        }
    }
}

此外,您可以考虑关注您的班级名称Oracle's Java Naming Conventions。类名中的每个单词都应该大写。例如,您的类可能更好地命名为SearchPdfText