我有一个方法可以在文件中搜索您提供的字符串并返回计数。但是我遇到区分大小写的问题。这是方法:
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循环中插入if语句
if(i == 4) ...
... strLine.toLowerCase().contains(searchFor[i].toLowerCase()) ...
关于如何更好地实现此功能的任何想法?
谢谢, 约旦
答案 0 :(得分:4)
为什么不在方法参数中添加boolean ignoreCase
?
或者你可以制作重载方法。
public int[] count(String[] searchFor, String fileName, boolean ignoreCase) {}
答案 1 :(得分:2)
由于你有一个字符串数组,其中的条目需要区别对待(例如区分大小写和不区分大小写),我建议创建一个自己的搜索类case
设置的字词:
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]++;
}
}
}
这样您就可以避免“全局”区分大小写或不区分大小写搜索,并且可以区别对待每个搜索字词。
答案 2 :(得分:1)
您可以使用Pattern#CASE_INSENSITIVE
并实施自己的方法:
private boolean myContains(your_parameters, boolean caseSensitive) {
if(!caseSensitive)
return Pattern.compile(strLine, Pattern.CASE_INSENSITIVE).matcher(searchFor[i]).find();
return strLine.contains(searchFor[i]);
}
答案 3 :(得分:0)
Apache StringUtils.ContainsIgnoreCase()
来救援。更多信息here。