Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 8381 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

C und C++
gelöst Anzahl der Buchstaben in einem String Element Array C++ (3)

Frage von Protected zum Thema C und C ...

Windows Server
Jnlp Endungen mit Java automatisch verknüpfen über GPO (10)

Frage von staybb zum Thema Windows Server ...

Java
Problem bei Java und FTP (1)

Frage von Marlon1 zum Thema Java ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...