加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java String Finder – 如何切换区分大小写?

发布时间:2020-12-15 04:23:58 所属栏目:Java 来源:网络整理
导读:我有一个方法,在文件中搜索你给它的字符串并返回一个计数.但是我遇到区分大小写的问题.这是方法: public int[] count(String[] searchFor,String fileName) { int[] counts = new int[searchFor.length]; try { FileInputStream fstream = new FileInputStr
我有一个方法,在文件中搜索你给它的字符串并返回一个计数.但是我遇到区分大小写的问题.这是方法:

public int[] count(String[] searchFor,String fileName) {
    int[] counts = new int[searchFor.length];
    try {
        FileInputStream fstream = new FileInputStream(fileName);
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;
        while ((strLine = br.readLine()) != null) {
        for (int i = 0; i < searchFor.length; i++) {
            if (strLine.contains(searchFor[i])) {
                counts[i]++;
            }
        }
    }
    in.close();
    } catch (Exception e) {// Catch exception if any
        System.err.println("Error: " + e.getMessage());
    }
    return counts;
}

我解析了一个字符串数组来搜索文件.但是,需要搜索数组中的某些字符串以忽略大小写.我怎么能改变我的方法来适应这个,因为我完全被难倒了.

这个方法被多个类使用,因此我不能简单地将if语句插入到所说的for循环中

if(i == 4) ... 
... strLine.toLowerCase().contains(searchFor[i].toLowerCase()) ...

有关如何更好地实现此功能的任何想法?

谢谢,
约旦

解决方法

由于你有一个字符串数组,其中的条目需要区别对待(例如区分大小写和不区分大小写),我建议使用案例设置为搜索项创建一个自己的类:

public class SearchTerm {
    private final String term;
    private final boolean caseSensitive;

    public SearchTerm(final String term,final boolean caseSensitive) {
        this.term = term;
        this.caseSensitive = caseSensitive;
    }

    public String getTerm() {
        return term;
    }

    public boolean isCaseSensitive() {
        return caseSensitive;
    }
}

然后您可以使用该类替换当前数组:

count(SearchTerm[] searchFor,String fileName)

并在您的搜索方法中使用它:

for (int i = 0; i < searchFor.length; i++) {
    if (searchFor[i].isCaseSensitive()) {
        if (strLine.contains(searchFor[i].getTerm())) {
            counts[i]++;
        }
    }
    else {
        // this line was "borrowed" from Maroun Marouns answer (you can also use different methods to search case insensitive)
        if (Pattern.compile(strLine,Pattern.CASE_INSENSITIVE).matcher(searchFor[i].getTerm()).find()) { 
            counts[i]++;
        }
    }
}

这样您就可以避免“全局”区分大小写或不区分大小写的搜索,并且可以区别对待每个搜索词.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读