2010-01-08 2 views
0

Используя окно msdos, я пишу трубку в файле amazon.txt. Я пытаюсь использовать рамки коллекций. Имейте в виду, я хочу, чтобы этот был максимально простым. Что я хочу сделать, так это считать все уникальные слова в файле ... нет дубликатовНайдите уникальные слова в файле - java

Это то, что у меня есть до сих пор .. будьте добры, это мой первый проект java.

import java.util.Scanner; 
import java.util.ArrayList; 
import java.util.Iterator; 


public class project1 
{ 

//ArrayList<String> a = new ArrayList<String>(); 

public static void main(String[] args) 
{ 
Scanner sc = new Scanner(System.in); 
String word; 
String grab; 

int count = 0; 
ArrayList<String> a = new ArrayList<String>(); 
//Iterator<String> it = a.iterator(); 

System.out.println("Java project\n"); 
while (sc.hasNext()) 
{  
word = sc.next(); 
a.add(word); 
if (word.equals("---")) 
{ 

break; 
    } 
    } 
Iterator<String> it = a.iterator(); 

while(it.hasNext()) 
{ 
    grab = it.next(); 

if(grab.contains("a")) 
{ 

System.out.println(it.next()); // just a check to see 
count++; 
     } 
     } 
System.out.println("I counted abc = "); 
System.out.println(count); 
System.out.println("\nbye..."); 
} 
    } 
+0

добавьте тег домашней работы. – slimbo

+0

Практика для улучшения навыков копирования-вставки :) –

+0

Nicolai, это происходит, когда редактор, где вы копируете, использует вкладки для отступов. Довольно раздражает - вам нужно переформатировать каждую строку ... –

ответ

9

В вашей версии, словник a будет содержать все слова, но дубликаты, а также. Вы можете

(а) проверить для каждого нового слова, если она уже включена в список (List#contains метод следует назвать), или, рекомендуемое решение

(б) заменить ArrayList<String> с TreeSet<String> , Это позволит устранить дубликаты автоматически и хранить слова в алфавитном порядке

Редактировать

Если вы хотите, чтобы сосчитать уникальные слова, а затем сделать то же самое, что и выше, и желаемый результатом является размером коллекции. Поэтому, если вы введете последовательность «a a b c ---», результат будет равен 3, так как есть три уникальных слова (a, b и c).

+0

отличный ответ. +1, но у меня нет голосов :) –

+0

Что я хочу сделать, так это подсчет всех уникальных слов. NOT abc и т. Д. – icelated

+0

Andreas_D, я изменил исходное сообщение. – icelated

3

Вместо ArrayList < строки >, используйте HashSet < Строка > (без сортировки) или TreeSet < Строка > (отсортированный), если вам не нужен подсчет того, как часто встречается каждое слово, Hashtable < String, Integer > (не отсортировано) или TreeMap < String, Integer > (отсортировано), если вы это сделаете.

Если есть слова, которые вы не хотите, поместите их в HashSet <String> и убедитесь, что это не содержит слова вашего сканера, найденного перед его помещением в вашу коллекцию. Если вам нужны словарные слова, поместите свой словарь в HashSet <String> и убедитесь, что он содержит слово, которое сканер нашел, прежде чем поместить в вашу коллекцию.

+0

, если я поместил его в хэшсет, как бы использовать свой сканер для проверки этих слов? – icelated

+0

Вы используете свой сканер для первой последовательности символов. Затем вы преобразуете эту последовательность символов во все нижние регистры (если все слова в вашем HashSet являются строчными), то существует ли это слово в вашем HashSet. – lins314159

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