2015-10-18 81 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)) 

無論是大寫或小寫比較兩側