2k Aufrufe
Gefragt in Anwendungen(Java,C++...) von
Hallo Freunde,

ich habe 2 Strings:

String eins = "ABC,DEF,GHI,JKL";
String zwei = "-MNO,-XYZ,DEF,GHI";

Nun muss ich mit irgendeinem Entschediungsprozess überprüfen ob "String zwei" in "String eins" zu finden ist. In diesem Fall sollte es so verstanden werden:
in "String eins" darf MNO und XYZ nicht vorkommen (aufgrund des Minus), jedoch muss DEF und GHI in String "eins" vorhanden sein und was danach kommt sollte egal sein, solange wirklich die Bedingung erfüllt wird.

Mein Code sieht bist jetzt so aus, jedoch funktioniert die ganze Sache nicht wirklich (keine fehlermeldung)

import java.io.*;
public class Test {


public static void main(String[] args) throws IOException
{
String eins = "ABC,DEF,GHI,JKL";
String zwei = "-MNO,-XYZ,DEF,GHI";

String[] zweitmp = zwei.split(",");

String no=null;
String yes=null;


for(int i=0; i<zweitmp.length;i++)
{
if(zweitmp[i].startsWith("-"))
{no=zweitmp[i];}
else
{yes = zweitmp[i];}
}
for(int j=0; j<eins.length();j++)
{
if(!eins.contains(no) & eins.contains(yes))
{System.out.println("Ya");}
else
{System.out.println("No");}
}
}
}

9 Antworten

0 Punkte
Beantwortet von
Hallo,
dein "no" enthält noch das minus Zeichen. Das darf natürlich nicht in den contains Vergleich übernommen werden.
Folgender Code sollte es tun.

public static void main(String[] args) throws IOException
{
String eins = "ABC,DEF,GHI,JKL";
String zwei = "-MNO,-XYZ,DEG,GHI";
String[] zweitmp = zwei.split(",");
boolean status =false;
for(int i=0; i<zweitmp.length;i++)
{
if(zweitmp[i].startsWith("-"))
{
String pruef =zweitmp[i].substring(1);
if(eins.contains(pruef))
{status=false;}
else{status=true;}
}
else
{
if(eins.contains(zweitmp[i]))
{status=true;}
else{status=false;}
}

if(status==false)
{break;}

}
System.out.println(status);
}
0 Punkte
Beantwortet von
hallo,

vielen dank läuft wunderbar!!

freundliche grüße
KKK
0 Punkte
Beantwortet von
hallo nochmal,

ich bin mit meinem code in einer endlosschleife und komme nicht weiter.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Test2 {

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

boolean status = false;

// etl_z Tabelle
String etlz=null;
String etlzpfad = "Datei1.csv";
File etlzDat = new File(etlzpfad);
String[] etlztmp;
String etlzcodes;
String[] etlzmus = null;

// fin Tabelle
String fin=null;
String finpfad = "Datei2.csv";
File finDat = new File(finpfad);
String[] fintmp;
String fincodes;

try
{
BufferedReader etlzLes = new BufferedReader(new FileReader(etlzDat));
BufferedReader finLes = new BufferedReader(new FileReader(finDat));

// erste Zeile überspringen, aufgrund nichtrelevantem inhalt
etlzLes.readLine();
etlz = etlzLes.readLine();

fin = finLes.readLine();

while(etlz!=null)
{
// ETLZ-Schleife
// Dateiinhalt splitten

// etlz Tabelle
// Splitten der Zeile nach ';'
etlztmp = etlz.split(";");
etlzcodes = etlztmp[9];

// Splitten der davor gesplitteten Zeile nach '+'
etlzmus = etlzcodes.split("\\+");

etlzLes.readLine();


while (fin!=null)
{
// FIN-Schleife
// Dateiinhalt splitten

//fin Tabelle
// Splitten der Zeile nach ';'
fintmp = fin.split(";");
fincodes = fintmp[4];

// Schleife
for (int j = 0; j < etlzmus.length; j++)
{
if(etlzmus[j].startsWith("-"))
{
String pruef = etlzmus[j].substring(1);
//finmus.toString();
if(fincodes.contains(pruef))
{status=false;}
else{status=true;}
}
else
{
if(fincodes.contains(etlzmus[j]))
{status=true;}
else{status=false;}
}

if(status==false)
{break;}

}
System.out.println(status);
finLes.readLine();
}
}

}
catch (IOException e)
{
System.err.println("Error2: "+e);
}
}
}
0 Punkte
Beantwortet von
Hallo,

die Variable in der while Bedingung wird auch nicht aktualisiert.

while(etlz!=null) //etlz wird niemals null
while (fin!=null) //fin wird niemals null

anstatt
etlzLes.readLine();
musst du schreiben
etlz = etlzLes.readLine();

gleiches gilt für fin.
0 Punkte
Beantwortet von
hi,

nochmals danke repiv, hat auch gefunkt,

jedoch wird nur die erste zeile der Datei1(erste schleife) angesprochen, auf die folgenden zeilen wird nicht zugefgriffen
woran liegt das?! habs nicht erkennen können..

liebe grüße
0 Punkte
Beantwortet von
Hallo,

ist so schwierig zu sagen, wo das Problem liegt.
Ich verstehe z.B. nicht warum es nun 2 Dateien sind und was sie enthalten. Warum wird die gelesene Zeile aus der 1. Datei überhaupt nicht weiter verwendet.
Anhand der gelesenen Zeile muss doch sicher in der 2. Schleife etwas passieren.
Mein Empfehlung ist den Debugger deiner Entwicklungsumgebung einzusetzen und mal die einzelnen Schritt zu verfolgen.
Damit solltest Du schnell die Ursache des Problems ermitteln können.
0 Punkte
Beantwortet von
hi,

folgendes prinzip will erreicht werden.

ich habe 2 dateien mit strings befüllt die mit ; getrennt sind.

die zeilen der datei1 sollen JEWEILS durch die ganze datei2 durchlaufen und die true/false bedingung ausführen.
d.h. ich nehme die erste zeile von datei1 und lauf jede zeile von datei2 durch und führe die bedingung aus, danach nehme ich die zweite zeile von datei1 und laufe durch jede zeile von datei2 und führe die bedingung aus, danach dritte zeile von datei1 durch jede zeile von datei2 usw..

aber im aktuellen code läuft das programm NUR mit der ersten zeile von datei1 durch jede zeile von datei2. d.h datei1 wird nicht durchlaufen.
0 Punkte
Beantwortet von
Hallo,

ich kann noch einen kleinen Tip geben, aber den Rest bekommst Du mit einem Debugger auch selber raus.
Falls du keine Debugger hast, hilft es auch einfache Print Meldungen einzubauen und die einzelnen Schritte auszugeben.

- bei der 1. Datei scheintst du erst bei der 3. Zeile anzufangen, das ist vermutlich nicht beabsichtigt,
- wenn die 2. Datei einmal durchlaufen ist, kommst du nicht mehr an den Start der Datei zurück, damit du sie nochmal von vorne durchlaufen kannst

es könnte helfen den "BufferedReader finLes" erst in der äußeren Schleife zu verwenden. So machst Du die Datei bei jedem Durchlauf neu auf und stehst wieder am Anfang.

Viel Erfolg.
0 Punkte
Beantwortet von
Hallo,

"es könnte helfen den "BufferedReader finLes" erst in der äußeren Schleife zu verwenden."

und genau das wars, vielen dank REPIV für deine hilfe.

grüße
...