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]++; } } } 这样您就可以避免“全局”区分大小写或不区分大小写的搜索,并且可以区别对待每个搜索词. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |