2013-09-26 2 views
1

Я пытаюсь использовать сканер для чтения текстового файла, снятого с JFileChooser. wordCount работает правильно, поэтому я знаю, что он читает. Однако я не могу заставить его искать экземпляры введенного пользователем слова.Получение сканера для чтения текстового файла

public static void main(String[] args) throws FileNotFoundException { 
    String input = JOptionPane.showInputDialog("Enter a word"); 
    JFileChooser fileChooser = new JFileChooser(); 
    fileChooser.showOpenDialog(null); 
    File fileSelection = fileChooser.getSelectedFile(); 
    int wordCount = 0; 
    int inputCount = 0; 
    Scanner s = new Scanner (fileSelection); 
    while (s.hasNext()) { 
     String word = s.next(); 
     if (word.equals(input)) { 
      inputCount++; 
    } 
    wordCount++; 
} 
+2

Дайте нам пример содержимого вашего файла и ввода. –

+0

Как вы показываете inputCount? Вы обновляете его на каком-то графическом интерфейсе? –

+0

есть печать на консоль. Я думаю, это может быть потому, что за словом следует период. – user2792660

ответ

0

Вы должны будете искать

,; , ! ? и т.д.

для каждого слова. Метод next() захватывает целую строку до тех пор, пока она не достигнет empty space.

Будет рассмотрен «привет, как дела?» как следующие «привет», «как», «есть», «вы?».

Чтобы найти эти символы, вы можете использовать метод indexOf(String). Вы также можете использовать replaceAll (String regex, String replacement) для замены символов. Вы можете индивидуально удалить каждого персонажа, или вы можете использовать Regex, но обычно это сложнее понять.

//this will remove a certain character with a blank space 
word = word.replaceAll(".",""); 
word = word.replaceAll(",",""); 
word = word.replaceAll("!",""); 
//etc. 

Подробнее об этом методе:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29

Вот Regex пример:

//NOTE: This example will not work for you. It's just a simple example for seeing a Regex. 
//Removes whitespace between a word character and . or , 
String pattern = "(\\w)(\\s+)([\\.,])"; 
word = word.replaceAll(pattern, "$1$3"); 

Источник:

http://www.vogella.com/articles/JavaRegularExpressions/article.html

Вот хороший Regex пример, который может помочь вам:

Regex for special characters in java

Parse and remove special characters in java regex

Remove all non-"word characters" from a String in Java, leaving accented characters?

+0

Есть ли способ, чтобы сканер игнорировал эту пунктуацию? – user2792660

+0

@ user2792660 обновленный ответ –

+0

Я думаю, что предложенный мной подход является более всеобъемлющим, поскольку все принимается с '. *'. Подход replaceAll будет иметь проблемы с неуказанными специальными знаками. В этом специальном случае ';' или некоторые иностранные знаки. – mike

0

если пользователь текст занесены отличается в случае, то вы должны попробовать использовать equalsIgnoreCase()

+0

Я думаю, это может быть потому, что за словом следует период. Есть ли способ удалить это? – user2792660

0

в дополнении к blackpanthers ответа, вы должны также использовать накладку() для учета whitespaces.as «а» не равного в "ABC"

0

Вы должны взглянуть на matches().

equals не поможет, так как next() не возвращает файл слово за словом, а пустое пространство (не запятую, точку с запятой, и т.д.), разделенных токен знак (как другие упомянутые).

Здесь ява док
String#matches(java.lang.String)

... и немного примеров.

input = ".*" + input + ".*"; 
... 
boolean foundWord = word.matches(input) 

. является регулярное выражение, подстановочные и обозначает любой знак. .* обозначает 0 или более неопределенных знаков.Таким образом, вы получаете совпадение, если вход находится где-то в word.

Смежные вопросы