2016-04-24 4 views
0

Ich mache eine Zuweisung in Java, die erfordert, dass wir zwei verschiedene Dateien lesen. Einer hat die Top 1000 Jungennamen und der andere die Top 1000 Mädchennamen. Wir müssen ein Programm schreiben, das alle Namen zurückgibt, die in beiden Dateien sind. Wir müssen jeden Jungen- und Mädchennamen als String lesen, die Anzahl der Namen ignorieren und sie zu einem HashSet hinzufügen. Beim Hinzufügen zu einem HashSet gibt die add -Methode false zurück, wenn der hinzuzufügende Name bereits im HashSet vorhanden ist. Um also die gebräuchlichen Namen zu finden, müssen Sie nur nachverfolgen, welche Namen beim Hinzufügen false zurückgegeben haben. Mein Problem ist, dass ich nicht herausfinden kann, wie man die Anzahl der Namen in jeder Datei ignoriert. Mein HashSet enthält beides, und ich möchte nur die Namen.Ignoriere Zahlen in einer Textdatei, wenn ich sie in Java scanne

Hier ist was ich bisher habe.

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.HashSet; 
import java.util.Scanner; 
import java.util.Set; 

public class Names { 

public static void main(String[] args) { 
    Set<String> boynames = new HashSet<String>(); 
    Set<String> girlnames = new HashSet<String>(); 
    boynames = loadBoynames(); 

    System.out.println(girlnames); 

} 

private static Set<String> loadBoynames() { 
    HashSet<String> d = new HashSet<String>(); 
    File names = new File("boynames.txt"); 
    Scanner s = null; 
    try { 
     s = new Scanner(names); 
    } catch (FileNotFoundException e) { 
     System.out.println("Can't find boy names file."); 
     System.exit(1); 
    } 
    while(s.hasNext()){ 

     String currentName = s.next(); 
     d.add(currentName.toUpperCase()); 

    } 
    return d; 
    } 
} 

Mein Plan ist es, die HashSet zu nehmen, die ich zur Zeit die Mädchen Namen zu ihm haben, und fügen Sie, aber bevor ich brauche ich nicht die Zahlen in meinem HashSet haben.

Ich versuchte Zahlen mit diesem Code zu überspringen, aber es spuckte nur Fehler aus

while(s.hasNextLine()){ 
    if (s.hasNextInt()){  
     number = s.nextInt(); 
    }else{ 
     String currentName = s.next(); 
     d.add(currentName.toUpperCase()); 
    } 
} 

Jede Hilfe würde geschätzt.

+0

gibt es ein genaues Muster? Wie "Name - Nummer"? Wenn ja, könnten Sie die Datei einfach teilen. 'String line = s.next() .split (" - ") [0]'. Gleiches gilt für Leerzeichen und Kommas. Zeigen Sie nur ein paar Zeilen dieser Datei –

Antwort

0

Sie auch Regex nutzen könnten alle Zahlen ersetzen (oder mehr Sonderzeichen, wenn nötig)

testStr = testStr.replaceAll("\\d","");

0

Versuchen Sie die StreamTokenizer (java.io) -Klasse zum Lesen der Datei zu verwenden. Es teilt Ihre Datei in Tokens auf und stellt auch Token-Typen wie String-Wert, Zahlenwert im doppelten Datentyp, Dateiende, Zeilenende bereit. So können Sie das String-Token leicht identifizieren. können Sie Details finden hier http://docs.oracle.com/javase/6/docs/api/java/io/StreamTokenizer.html

+0

Dies ist trotzig etwas, das gut zu wissen ist. Ich werde weiter untersuchen. Danke für die Hilfe. – Arem