Prüfen ob Strings 2mal vorkommen

  • Themenstarter Themenstarter KauKasusK
  • Beginndatum Beginndatum
K

KauKasusK

Gast
hallo liebe freunde,

mein ziel ist es eine txt datei zu durchlaufen und Strings überprüfen ob sie genau 2 mal vorkommen,
kleiner 2 bzw größer 2 wäre ein fehler und sollte in einer extra datei protokolliert werden. habe noch kein codeansatz, weil ich ca. 0 ahnung habe wie ich diese überprüfung proggen soll..
um das zu veranschaulichen mach ich mal ne kleine skizze:

Datei.txt
======
Hans
Hans
Peter
Peter
Stefan
Andreas
Andreas
Andreas
=======

Stefan und Andeas wäre in diesem fall ein fehler und sollte in einer extra txt datei protokolliert werden.

danke an alle mitwirkenden.
 
Irgendwo musst du eine Liste führen die dir sagen kann "Wort x kommt y vor". Am Ende schaust du dir dann die Liste an und prüfst bei welchen Wörtern y != 2 an.
Dafür könntest du beispielsweise eine Map<String, Integer> verwenden.
 
Um das gleich fortzusetzen: in die Map kommt dann als Schlüssel der Name (also z.B. Hans) und als Wert die Häufigkeit, die du mit jedem Auftauchen in der Datei um eins hochzählst.

Lies eine Zeile ein, schaue, ob zu dem Namen ein Schlüsseleintrag vorhanden ist.
Falls ja: zähle Häufigkeit um eins hoch
falls nein: erstelle neuen Schlüssel und zähle dessen Häufigkeit um eins hoch
 
und um den Sack voll zu machen:
neben Liste (unperformant) und Map (Anzahlen zählen) könnte die treffendste Collection ein Set sein,
die kann genau nur und dafür dann ziemlich performant feststellen, ob ein Element schon vorhanden ist oder nicht,
HashSet etwa verwendet freilich intern eine HashMap, verdeckt diese nur
 
Naja, mit nem Set könntest du aber nichts darüber aussagen ob nen Wort mehr als 2 mal vorkommt, was ja wieder nen Fehler wäre. Ich denke um ne Map Wort -> Anzahl kommt man nicht drumrum (wenn die Wörter nicht sortiert sind).
 
[OT]
Sacht mal SlaterB und EikeB, seid Ihr eigentlich verwandt (wg. selbem "Nachnamen") 😀
[/OT]
 
achso, größer 2x, dachte es wäre genau Doppelte-Suche,

von Verwandschaft weiß ich nix 😉
(Achtung, wulffsche Ausweichantwort)
 
im falle dass das wort genau 2 mal vorkommt soll nix passieren, nur wenn das wort >2 bzw <2 mal vorkommt dann soll das wort in ein fehlerprotokoll geschrieben werden.
 
zur Verdeutlichung:
mit 'genau Doppelte-Suche' meinte ich 'genau 1 mal vorkommt', nicht 'genau 2 mal vorkommt',
aber ergibt sich ja alles von selbst, bin dann auch für Map
 
Wenn die Einträge schon so gruppiert sind wie im Beispiel, dann reichen auch schon ein String (Name) und ein boolean (zweimal gefunden) zur Prüfung aus.
 
für einen der bisher keine erfahrungen mit Map, HashSet gemacht hat, muss ich mich erstmal einlesen.
ich danke euch allen, hoffe es klappt. ne string funktion wie repeat oder so wäre eigentlich auch nicht schlecht, naja ich seh mal was ich hinkrieg oder auch nicht. nochmals danke.
 
Soll sofort ein Fehler gemeldet werden, wenn einer erkannt wird? Ist die Liste sehr lang? Wie auch immer, mit der Map ist's am einfachsten....
 
die liste ist etwas länger ja, wenn bei einem schleifendurchlauf ein fehler gefunden wurde soll dieser eingetragen werden und die schleife soll fortgesetzt werden.
 
Ja, ich dachte nur kurz, ob man sich da was trickreiches überlegen könnte, im Sinne eines "Paritätschecks":
Java:
Set<String> fehler = ...

for (String s : input)
{
    if (!fehler.contains(s)) fehler.add(s);
    else fehler.remove(s);
}
aber das würde nur zwischen gerader und ungerader Anzahl unterscheiden und auch nicht viel bringen. Also doch die Map ...
 
moin, anfänger und null erfahrung mit 'map'
kein plan wie ich vorgehen soll.
Schonmal Google bemüht?

Eine Map ist eine Sammlung von Datensätzen (Collection), die durch Paare von (Schlüssel, Wert) gekennzeichnet sind.

Vertreter hiervon wäre z.B. eine HashMap, bei der jeder Schlüssel nur einmal vorkommen darf. Desweiteren gibt´s auch noch die TreeMap.

EDIT: Wenn das jetzt in die Art: "ich hab keine Ahnung, macht ihr das mal" ausarten soll, verschiebt das Thema am besten in die Jobbörse...
 
Bevor es hier noch ausartet.

Java ist auch eine Insel – 11.6 Assoziative Speicher HashMap und TreeMap

Java:
import java.util.HashMap;
import java.util.Map;


public class Test{

	public static void main(String[] args) {
	
		
		String array [] = {"Hans","Hans","Peter","Peter","Stefan","Andreas","Andreas","Andreas"};
		
		Map<String,Integer> map = new HashMap<String,Integer>();
		
		for(String key : array){
			if( map.get(key) == null ){
				map.put(key, 1);
			} else {
				map.put(key, map.get(key)+1);
			}
		}
		
		for(Map.Entry<String, Integer> c : map.entrySet()){
			if(c.getValue() != 2)
				writeFile(c.getKey());
		}
	}
	
	private static void writeFile(String name){
		// Füge Namen in der extra Datei ein
		System.out.println(name);
	}
}
 
viele dank truesoul, und auch an alle anderen die sich bemüht haben. ihr macht eine gute arbeit.

liebe grüße
 

Neue Themen


Zurück
Oben