Mit HashSet speichern einer text-Datei und Lesen
Habe ich gesehen, dass viele große Ressourcen über HasSets, aber nichts, das mir hilft, mit dieser besonderen problem. Ich bin dabei, eine algorithmen-Klasse auf Generika und diese Zuordnung erfordert eine txt-Datei eingelesen werden, das system mit Scanner (was getan wird) und mit einem hashSet, laden Sie die txt-Datei, so dass ich es Lesen kann mit user-input und finden Sie die Anzahl der vorkommen des Wortes. ich habe die Methode für die Rückgabe Worte und ich habe die meisten der hashSet und Datei-reader-code getan. Aber ich bin völlig stecken, wie bewahren Sie die gesamte txt-Datei als ein hashSet. ich konnte es nicht bekommen, um durch Verbrechen zu Begehen.hinzufügen und ich habe versucht, einige andere Dinge. Bin ich fehlt ein einfacher Weg, um diese Methode implementieren? Dank
Edit: Zuordnung Anweisungen -
Programm 1 (70 Punkte)
Laden Sie eine java.util.HashSet mit den Worten aus dem Roman "Verbrechen und Strafe", von
Theodore Dostojewski (text-Datei auf Blackboard mit dieser Zuordnung). Eingabeaufforderung an den Benutzer
geben Sie ein Wort und berichten, ob oder nicht, das Wort erscheint in dem Roman.
Edit: Ok, ich habe all dies geschrieben und es läuft, aber es ist nicht zu finden, Worte, die sind definitiv in der txt-Datei so, dass ich irgendwo falsch gelaufen ist das hinzufügen der Datei in das hashSet. Irgendwelche Ideen? Ich habe versucht mit array-Liste, verschiedene String-Implementierungen und ich weiß einfach nicht, wo sich zu drehen. Vielen Dank für jede hilfreiche info.
import java.awt.List;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class CandPHashSet {
public static void main(String[] args) throws FileNotFoundException{
Scanner file = new Scanner(new File("crime_and_punishment.txt")).useDelimiter("[ˆa-zA-Z]+");
Scanner input = new Scanner(System.in);
Set<String> crime = new HashSet<String>();
while(file.hasNext()){
String line = file.nextLine();
//String[] words = line.split("[ˆa-zA-Z]+");
for (String word : line.split("[ˆa-zA-Z]+")){
crime.add(line);
}
}
String search;
System.out.println("Enter a word to search for: ");
search = input.next();
if(crime.contains(input)){
System.out.println("Yes");
}else{
System.out.println("No");
}
}
}
- Ich habe es weit, aber es sieht immer noch so, ich bin nicht hinzufügen es richtig....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie Sie nicht brauchen, um count das Wort vorkommen. Sie müssen nur split in der input-Datei string in einzelne Worte, und speichern Sie Sie in einem
HashSet<String>
. Dann verwenden Sie die Methodecontains()
zu überprüfen, ob ein Wort durch die Benutzer ist anwesend in der Gruppe.Gibt es ein paar Probleme im code, die Sie überprüfen sollten:
Die Art und Weise Sie
useDelimiter()
imScanner
ist nicht korrekt. Sie wahrscheinlich nicht wollen, geben Sie ein Trennzeichen, so dass Leerzeichen, die standardmäßig verwendet werden.Wenn Sie Leerzeichen als der scanner delimiter es werden bereits gesplittete Ihre Eingabe als Worte. So brauchen wir nicht zu Lesen Sie die Datei zeilenweise ein.
Verwenden Sie
crime.contains(input)
zu suchen, die für den Benutzer bereitgestellten Wort. Aberinput
ist einScanner
, nicht einString
. Sie verwenden möchtencrime.contains(search)
.Den überarbeiteten code würde ungefähr so Aussehen wie diese:
Den Sie senden widersprüchliche Anforderungen.
ist nicht das gleiche wie
HashSet funktioniert gut für das zweite. Nicht für die erste.
Sehr vorsichtig sein beim Lesen von Anforderungen. 5 extra-Minuten zu Lesen, Sie können sparen Sie 5 Stunden extra code zu schreiben.
Folgen Sie den Anweisungen, was Sie tun müssen, ist fügen Sie ein Wort in einer Zeit, um Ihre hash-set. Lesen Sie auf jeweils ein Wort hat bereits eine Antwort hier
Immer wenn ich bin mir nicht sicher, welche Behälter zu verwenden, sehe ich das:
Können Sie nicht mit einem
HashSet.
Sie nur verlieren Sie die Duplikate. Sie können die Anzahl t der Duplikate, wie Sie Sie hinzufügen, aber dann müssen Sie irgendwo zu setzen, die zählt.Einen
Map<String, Integer>
erforderlich ist.