Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

(Java) Array überprüfen - Eingabeparameter

Frage Entwicklung

Mitglied: user1234

user1234 (Level 1) - Jetzt verbinden

09.04.2012 um 13:11 Uhr, 9267 Aufrufe, 10 Kommentare

Hallo zusammen,

ich habe ein Problem bei der Überprüfung eines Arrays.
Wenn args[0] nicht eingegeben wurde, soll eine Fehlermeldung kommen.
Wenn args[1] nicht eingegeben wurde, soll etwas anderes passieren (hier noch nicht relevant).

Mit .lengt kann ich die Länge überprüfen und mit .equals kann man ja überprüfen, ob ein bestimmter Inhalt vorhanden ist.
Nur leider hilft mir das irgendwie nicht weiter.
01.
/* FileSearcher.java 
02.
 * Reads all the data from a file and prints it. 
03.
 */ 
04.
import java.io.*; 
05.
 
06.
public class FileSearcher { 
07.
	public static void main(String[] args) { 
08.
		String searchString = args[0]; 
09.
		 
10.
		String fileOrDir = args[1];	 
11.
		checkArgs(args);	 
12.
			File nFile = new File(fileOrDir);					 
13.
			if (nFile.isDirectory()) { 
14.
				pathSearch(searchString, fileOrDir);					 
15.
16.
			else {				 
17.
				simpleSearch(searchString, fileOrDir); 
18.
19.
					 
20.
21.
	public static void checkArgs(String[] args){ 
22.
        if (args[0] =="" ) { 
23.
            System.out.println("Es wurde kein Suchwort eingegeben!"); 
24.
        }        
25.
26.
	 
27.
	public static void simpleSearch(String searchString, String fileOrDir){ 
28.
// tu was cooles 
29.
30.
	 
31.
	public static void pathSearch(String searchString, String fileOrDir){ 
32.
// tu was cooles 
33.
34.
}
Auf eine Antwort würde ich mich sehr freuen.

Gruß
Mitglied: mak-xxl
09.04.2012 um 13:26 Uhr
Moin user1234,

Mit .lengt kann ich die Länge überprüfen und ...

... das ist es doch (fast, weil .length) schon:

in Zeile 8 des Codes evtl. zunächst so prüfen:
01.
for (int i = 0; i < args.length; i++) ...
In der Schleife kannst Du prüfen, was immer Dir sinnfällig erscheint, oder Du wertest nur die Variable i aus (Anzahl übergebener Argumente).

Frohe Ostern und freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: user1234
09.04.2012 um 13:38 Uhr
Hallo Marios,

danke für deine Antwort.

Die Idee kam mir auch schon in den Sinn, jedoch kann ich damit folgendes nicht umsetzen:
- wenn args[0] leer ist -> Fehlermeldung und Programm soll geschlossen werden
- wenn args[1] leer ist -> Bestimmte Default-Parameter (Verzeichnisse) sollen als Wert genommen werden

Frohe Ostern und Grüße vom Festland ;)
Bitte warten ..
Mitglied: mak-xxl
09.04.2012 um 13:55 Uhr
Zitat von user1234:
Die Idee kam mir auch schon in den Sinn, jedoch kann ich damit folgendes nicht umsetzen:
- wenn args[0] leer ist -> Fehlermeldung und Programm soll geschlossen werden

Wieso nicht? So:
01.
... 
02.
if(args[0] == ""){ 
03.
 System.out.println("1. Parameter leer! Muss aber sein: xx"); 
04.
 System.out.exit(1); 
05.
}
- wenn args[1] leer ist -> Bestimmte Default-Parameter (Verzeichnisse) sollen als Wert genommen werden
dito. Nur Mut.

Wenn vorher sichergestellt wurde, dass Argumente übergeben wurden (args.length), dann gibt es bei dieser Abfrage auch keine ArrayOutOfBounds-Exception.

Frohe Ostern und freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: user1234
11.04.2012 um 09:43 Uhr
Ja. Aber ArrayOutOfBounds-Exception soll nicht kommen. Auch nicht, wenn nicht alle Argumente übergeben wurden!

Jetzt kommt natürlich so ein Fehler immer.
Bitte warten ..
Mitglied: mak-xxl
11.04.2012 um 10:20 Uhr
Moin user1234,

Zitat von user1234:
Ja. Aber ArrayOutOfBounds-Exception soll nicht kommen. Auch nicht, wenn nicht alle Argumente übergeben wurden!

Jetzt kommt natürlich so ein Fehler immer.

Ja, wenn man nun so gar nichts selbst kombiniert:

Im ersten Post wurde Dir 'args.length' nahegelegt, im zweiten gezeigt, wie man in Java anhand der Argumentüberprüfung einen Ausstieg vornimmt - ein wenig Beschäftigung mit den Grundlagen hilft einem hier aufs Pferd, etwa so:

01.
/* alle Parameter, so vorhanden, ausgeben */ 
02.
for (int i = 0; i < args.length; i++) { 
03.
    if (i < args.length) { 
04.
        a = a + args[i] + ", "; 
05.
06.
    System.out.println(a); 
07.
}
Anders formatiert:

01.
/* alle Parameter, so vorhanden, ausgeben */ 
02.
for (int i = 0; i < args.length; i++) { 
03.
    if (i < args.length) { 
04.
        System.out.println("args[i]\n"); 
05.
06.
}
Oder so:

01.
/* Kein(e) Parameter -> Warnung */ 
02.
if (args.length == 0) { 
03.
    System.out.println("Gib mir 2 Parameter mit auf den Weg!\n"); 
04.
    System.out.exit(1); 
05.
}
Und im Sinne der Nutzenstiftung:

01.
/* überhaupt Parameter übergeben? */ 
02.
if(args.length == 0){ 
03.
 System.out.println("Kein Parameter übergeben. Programmende."); 
04.
 System.out.exit(1); 
05.
06.
/* 1 Parameter übergeben */ 
07.
if(args.length == 1){ 
08.
    /* Parameter ist leer */ 
09.
    if(args[0] == ""){ 
10.
     System.out.println("1. Parameter leer! Muss aber sein: xx"); 
11.
     System.out.exit(1); 
12.
    } /* hier kann die Else stehen ... */     
13.
}
Parameter auf 'leer' prüfen ist hier wohl relativ sinnlos, besser wäre eine Prüfung auf 'String', 'Numeric' oder Länge ...

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: user1234
11.04.2012 um 11:18 Uhr
Okay. Noch einmal eine Frage:
Wenn ich die Datei per Console ausführe, müsste man dies ja so machen:
"java FileSearcher.java Suchwort Pfad"

Ist es möglich, als Parameter nur den Pfad mitzugeben?

Oben bei deinem Code gehst du ja davon aus, dass insgesamt ein Argument übergeben wurde,
und das nur Pfad übergeben wurde. Ist dies so möglich?



Ich hoffe ich habe mich verständlich ausgedrückt.

Vielen Dank bisher für deine Mithilfe.
Gruß
Bitte warten ..
Mitglied: mak-xxl
11.04.2012 um 11:44 Uhr
Moin user1234,

Zitat von user1234:
Wenn ich die Datei per Console ausführe, müsste man dies ja so machen:
"java FileSearcher.java Suchwort Pfad"

Ja.

Ist es möglich, als Parameter nur den Pfad mitzugeben?

Ja. Die Anzahl der Parameter ist beliebig. Und daran denken: Pfade mit Leerzeichen in Literale setzen.

Oben bei deinem Code gehst du ja davon aus, dass insgesamt ein Argument übergeben wurde,

Nein. Der Code prüft zunächst, ob ein Parameter übergeben wurde:

01.
if(args.length == 0)
'args.length' gibt die Anzahl der übergebenen Parameter zurück - nicht die Länge eines einzelnen Parameters. Wenn Du also 2 Parameter übergeben hast, ist 'args.length' = 2 (Cave: Im Array 'args' ist dann die Obergrenze = 1).
Ich habe lediglich die Auswertung für einen Parameter angedeutet.

und das nur Pfad übergeben wurde.

Was übergeben wurde, musst Du prüfen:
- wenn klar ist, das überhaupt ein oder mehrere Parameter übergeben wurden,
- die Parameter separiert vorliegen (das besorgt dass Array 'args' automatisch,
- sie angesprochen werden, i.e. per args[0]

Ich hoffe ich habe mich verständlich ausgedrückt.

Hast Du - ich hoffe:
Parameter auf 'leer' prüfen ist hier wohl relativ sinnlos, besser wäre eine Prüfung auf 'String', 'Numeric' oder Länge ..
ich auch. Und es gibt noch viele Ansätze, Dir das solange zu erklären, bis Klarheit herrscht.

Also, in diesem Sinne - schön neugierig bleiben!

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: user1234
11.04.2012 um 13:12 Uhr
Danke Mario.

Das mit dem .length habe ich bereits verstanden.
Eine Frage noch wegen den Parametern:

So sollte die Eingabe ja aussehen:
"java FileSearcher.java Suchwort Pfad"
also
"java FileSearcher.java Test file.txt"

args[0] habe ich als Suchwort definiert.
args[1] als Datei/Pfad

Aber wie kann ich jetzt nur args[1] (Datei) angeben?
"java FileSearcher.java file.txt"
Dort würde das file.txt ja args[0] sein und args[1] wäre leer. Richtig?

Ich sehe noch keine Möglichkeit, per Eingabe über die Konsole nur args[1] anzugeben.

Danke für deine Hilfe.
Bitte warten ..
Mitglied: mak-xxl
11.04.2012 um 13:31 Uhr
Moin user1234,

Zitat von user1234:
Aber wie kann ich jetzt nur args[1] (Datei) angeben?

Gar nicht - siehe weiter unten.

"java FileSearcher.java file.txt"
Dort würde das file.txt ja args[0] sein und args[1] wäre leer. Richtig?

Nicht leer - 'args[1]' existiert dann nicht, ein Zugriff darauf ergibt folglich 'ArrayOutOfBounds'.

Ich sehe noch keine Möglichkeit, per Eingabe über die Konsole nur args[1] anzugeben.

Nur - geht nicht. Aber:

Wenn Dein Hintergedanke der ist, dass Deine Anwendung auch ohne Pfadangabe rennt, niemals aber ohne Suchwort, dann musst Du, wenn nur ein Parameter gegeben ist, diesen prüfen:
- ist es eine Pfadangabe (i.e. Back-/Slashes drin?)
- wenn nein, nimm diesen Parameter als Suchwort und suche in einem irgendwo von Dir definiertem Standardpfad.

Viel besser ist es aber, wenn Du den Programmaufruf so umstrickst, dass der Anwender mit 'Pflichteingaben' konfrontiert wird, etwa so:

01.
java programm.java --t=Suchbegriff --p=Suchpfad
oder so:
01.
java programm.java /t=Suchbegriff /p=Suchpfad
oder ähnlich.

Dann haben die Parameter eine 'Kennung', von denen '-p' leer sein kann (dann Standardpfad oder Hinweis) und '-t' nie leer sein darf (dann Warnung und Programmende).

Die Überprüfung, ob Parameter übergeben wurden und diese sinnfällig sind, ist immer notwendig.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: user1234
11.04.2012 um 13:40 Uhr
Okay.

Vielen Dank! Eine schöne Restwoche!
Gruß
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Leere Array-Werte aus einem Array entfernen
gelöst Frage von ToniHoBatch & Shell3 Kommentare

Hallo zusammen, ich bin dabei ein Powershell-Script zu schreiben, welches diverse Reports generieren kann. Für die Eingabe von SamAccountNames ...

Windows 7
Netzwerkanmeldeinformationen überprüfen
Frage von HenereWindows 76 Kommentare

Hallo zusammen, auf einem meiner Laptops (Win7) kommt seit heute früh diese Meldung: Der Laptop ist in einem AD, ...

JavaScript
Javascript Array
gelöst Frage von internet2107JavaScript2 Kommentare

Ich habe folgendes Problem. Ersetze ich die folgenden Zahlen gegen Variablenwerte, bekomme ich nicht das Ergebnis, wie mit festen ...

Batch & Shell
Array oder Object oder wie soll ich das machen
gelöst Frage von Druide83Batch & Shell4 Kommentare

Hallo, mal wieder verzweifelt. Wahrscheinlich ist die Lösung einfach, aber ich habe gerade keinen Kopf mehr zum klar denken. ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 6 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 11 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 12 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 23 StundenInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Windows Server
Remotesteuerung der Sitzung (Kennung XX) fehlgeschlagen
gelöst Frage von Stefan91Windows Server14 Kommentare

Hallo Zusammen, seit kurzem bekomme ich oben genannte Fehlermeldung, wenn ich versuche eine Remotesitzung über den Taskmanager fernzusteuern (Rechtsklick ...