Java string finder – how do I switch case sensitivity?

I have a method to search the file for the string you give it and return a count But I have a case sensitivity problem This is the method:

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

I parsed an array of strings to search for files However, some strings in the array need to be searched to ignore case How can I change my way to adapt to this, because I'm completely baffled

This method is used by multiple classes, so I can't simply insert an IF statement into the for loop

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

Any ideas on how to better implement this feature?

Thank you, Jordan

Solution

Since you have a string array in which entries need to be treated differently (for example, case sensitive and case insensitive), I suggest using case settings to create your own class for search terms:

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

You can then replace the current array with this class:

count(SearchTerm[] searchFor,String fileName)

And use it in your search method:

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]++;
        }
    }
}

This way you can avoid "global" case sensitive or case insensitive searches and treat each search term differently

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>