我正在用Java写论文。我一度陷入困境。我无法从文件中搜索字符串。我需要从文件中搜索用户输入的单词,即使文件中的字符串是“F”并且他输入“f”我得得到响应。这样做的最佳方法是什么?这是实现这种事情的最好方法吗?如果我错了,可能最好使用ArrayList
纠正我。
这是我到目前为止所做的:
JButton btnTuletaParoolMeelde = new JButton("Tuleta parool meelde");
btnTuletaParoolMeelde.setBackground(new Color(37, 209, 175));
btnTuletaParoolMeelde.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//Search
String keskkond = textArea.getText();
if(keskkond.length()<=0){
System.out.println("You didn't enter anything");
}else{
int tokencount;
FileReader filereader = null;
try {
filereader = new FileReader("paroolid.txt");
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
BufferedReader br=new BufferedReader(filereader);
String s;
int linecount=0;
String keyword = keskkond; //keskkond is like Facebook etc..
try {
while ((s = br.readLine())!=null){
if(s.contains(keyword))
System.out.println(s);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
这是人们可以输入网络和密码然后将其写入文件的地方。
//Add your password and network and Button actions
btnLisaParool = new JButton("Add passowrd");
btnLisaParool.setBackground(new Color(37, 209, 175));
btnLisaParool.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String parool = String.valueOf(passwordField.getPassword());
String koht = textField.getText();
if (koht.isEmpty() && parool.isEmpty()) {
lblFeedback.setText("You didn't enter anything.");
} else if(parool.isEmpty()) {
lblFeedback.setText("Enter password please!.");
}else if(koht.isEmpty()){
lblFeedback.setText("Enter network please!");
}else{
FileWriter fWriter = null;
BufferedWriter writer = null;
try {
fWriter = new FileWriter("paroolid.txt", true);
writer = new BufferedWriter(fWriter);
writer.write("Teie " + koht + " -i parool oli: " + parool);
writer.newLine();
writer.close();
lblFeedback.setText("Teie " + koht + " parool, mis koosnes " + parool.length() + " tähest, on salvestatud.");
} catch (Exception e1) {
lblFeedback.setText("Error: " + "Couldn't find file");
}
}
passwordField.setText("");
textField.setText("");
}
答案 0 :(得分:1)
首先,不要对EDT
执行长时间运行的操作(如读/写文件)。其次,请确保释放用于防止内存泄漏的所有资源。要回答您的问题,您可以修改您正在搜索的String
和您正在搜索的大写或小写字母。
以下是一个例子:
try(BufferedReader br = new BufferedReader(new FileReader("paroolid.txt"))){
for(String line; (line = br.readLine()) != null;){
if(line.toLowerCase().contains(toSearchFor.toLowerCase())){
System.out.println(line);
}
}
}catch(Exception e){
e.printStackTrace();
}
答案 1 :(得分:0)
首先检查&#34; f&#34;然后检查toUppercase(&#34; f&#34;)
答案 2 :(得分:0)
equalsIgnoreCase()
方法可以解决您的问题。或者你可以使用
org.apache.commons.lang3.StringUtils.containsIgnoreCase()
如果必须使用contains。
答案 3 :(得分:0)
使用equalsIgnoreCase会使它在测试时不会考虑字母的大小写以确定它们是否相等。
另外,即使没有问过,我也有两点建议:
而不是:
try {
filereader = new FileReader("paroolid.txt");
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
尝试这样做:
try ( br = new BufferedReader(new FileReader("paroolid.txt"))){
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
这称为try-with-resources语句,将自动关闭文件读取器。您的BufferedReader也可以这样做。
第二个建议是使用Scanner类。除非您明确使用此类,否则最好只使用Scanner类。在您的情况下,它没有任何缺点,更容易使用。