2015-10-18 80 views
2

我试图让我的代码读取一个txt文件,然后吐出某个字符出现多少次。如何查看大写和小写的txt文件? Java

所以如果txt文件读取。

“我的我可能多大年纪?”

如果我输入m,我需要它吐出3,但用下面的代码,我不断得到1.它不会读取大写。请帮助?

public static void main(String[] args) throws IOException { 

    String fileName; 
    String inputLetter; 
    int count = 0; 



    fileName = JOptionPane.showInputDialog("Enter the filename: "); 

    inputLetter = JOptionPane.showInputDialog("Enter a letter contained " + 
      "in a string."); 
    inputLetter.toLowerCase(); 
    char letterAsChar = inputLetter.charAt(0); 

    File file = new File(fileName); 
    Scanner inputFile = new Scanner(file); 




    while (inputFile.hasNext()) 
    { 
     String holdLine = inputFile.nextLine(); 
     for (int i = 0; i < holdLine.length(); i++) 

     if (holdLine.charAt(i) == letterAsChar || 
     holdLine.charAt(i) == Character.toUpperCase(letterAsChar)) 
     { 
      count++; 
     } 
    } 


    System.out.println(count); 
+0

小想法在循环中使用lcase和ucase变量,'inputlc = inputletter.toLowerCase()。charAt(0); inputuc = inputletter.toUpperCase()。charAt(0);' – Whome

+0

我试过你的例子,我得到的结果是'3'。你确定该程序有问题? –

回答

1

方法toLowerCase和朋友返回一个字符串,所以你必须始终保存结果:

inputLetter = inputLetter.toLowerCase(); 

转换整个生产线以简化处理也更好:

String holdLine = inputFile.nextLine().toLowerCase(); 

if (holdLine.charAt(i) == letterAsChar){ 
    count++; 
} 
+0

完美运作。非常感谢。只是为了确保我的理解,这只适用于我将输入强制为小写字母,并且每次从inputFile读取一行时,它都会立即在if语句之前变成小写字母。 – Philygt

+0

正确。 - 除了不存储方法调用的结果之外,您的版本也可以工作,但整个字符串的一次转换调用比单独调用效率更高。 – laune

0

做这样的

Character.toUpperCase(holdLine.charAt(i)))==Character.toUpperCase(letterAsChar)) 

无论是大写或小写比较两侧