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

Mitglied: user1234

user1234 (Level 1) - Jetzt verbinden

09.04.2012 um 13:11 Uhr, 9423 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
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 7 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 12 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server24 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless22 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...