【问题标题】:Search String only prints out searches without characters attached搜索字符串仅打印出没有附加字符的搜索
【发布时间】:2016-01-11 15:10:41
【问题描述】:

我是 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;
            }
        }
    }
}
}

【问题讨论】:

  • 你想要的输出是什么?
  • 混淆问题,尝试更好的解释。

标签: java string search text


【解决方案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

【讨论】:

  • 这些都是很好的解决方案!谢谢大家!!
【解决方案2】:

您只需将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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多