(Java) Array überprüfen - Eingabeparameter
Hallo zusammen,
ich habe ein Problem bei der Überprüfung eines Arrays.
Wenn args 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.
Auf eine Antwort würde ich mich sehr freuen.
Gruß
ich habe ein Problem bei der Überprüfung eines Arrays.
Wenn args 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.
/* FileSearcher.java
* Reads all the data from a file and prints it.
*/
import java.io.*;
public class FileSearcher {
public static void main(String args) {
String searchString = args;
String fileOrDir = args[1];
checkArgs(args);
File nFile = new File(fileOrDir);
if (nFile.isDirectory()) {
pathSearch(searchString, fileOrDir);
}
else {
simpleSearch(searchString, fileOrDir);
}
}
public static void checkArgs(String args){
if (args =="" ) {
System.out.println("Es wurde kein Suchwort eingegeben!");
}
}
public static void simpleSearch(String searchString, String fileOrDir){
// tu was cooles
}
public static void pathSearch(String searchString, String fileOrDir){
// tu was cooles
}
}
Auf eine Antwort würde ich mich sehr freuen.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183273
Url: https://administrator.de/forum/java-array-ueberpruefen-eingabeparameter-183273.html
Ausgedruckt am: 02.02.2025 um 14:02 Uhr
10 Kommentare
Neuester Kommentar
Moin user1234,
... das ist es doch (fast, weil .length) schon:
in Zeile 8 des Codes evtl. zunächst so prüfen:
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
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:
for (int i = 0; i < args.length; i++) ...
Frohe Ostern und freundliche Grüße von der Insel - Mario
Zitat von @user1234:
Die Idee kam mir auch schon in den Sinn, jedoch kann ich damit folgendes nicht umsetzen:
- wenn args leer ist -> Fehlermeldung und Programm soll geschlossen werden
Die Idee kam mir auch schon in den Sinn, jedoch kann ich damit folgendes nicht umsetzen:
- wenn args leer ist -> Fehlermeldung und Programm soll geschlossen werden
Wieso nicht? So:
...
if(args == ""){
System.out.println("1. Parameter leer! Muss aber sein: xx");
System.out.exit(1);
}
- 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
Moin user1234,
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:
Anders formatiert:
Oder so:
Und im Sinne der Nutzenstiftung:
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
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. 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:
/* alle Parameter, so vorhanden, ausgeben */
for (int i = 0; i < args.length; i++) {
if (i < args.length) {
a = a + args[i] + ", ";
}
System.out.println(a);
}
Anders formatiert:
/* alle Parameter, so vorhanden, ausgeben */
for (int i = 0; i < args.length; i++) {
if (i < args.length) {
System.out.println("args[i]\n");
}
}
Oder so:
/* Kein(e) Parameter -> Warnung */
if (args.length == 0) {
System.out.println("Gib mir 2 Parameter mit auf den Weg!\n");
System.out.exit(1);
}
Und im Sinne der Nutzenstiftung:
/* überhaupt Parameter übergeben? */
if(args.length == 0){
System.out.println("Kein Parameter übergeben. Programmende.");
System.out.exit(1);
}
/* 1 Parameter übergeben */
if(args.length == 1){
/* Parameter ist leer */
if(args == ""){
System.out.println("1. Parameter leer! Muss aber sein: xx");
System.out.exit(1);
} /* hier kann die Else stehen ... */
}
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
Moin user1234,
Ja.
Ja. Die Anzahl der Parameter ist beliebig. Und daran denken: Pfade mit Leerzeichen in Literale setzen.
Nein. Der Code prüft zunächst, ob ein Parameter übergeben wurde:
'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.
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
Hast Du - ich hoffe:
Also, in diesem Sinne - schön neugierig bleiben!
Freundliche Grüße von der Insel - Mario
Zitat von @user1234:
Wenn ich die Datei per Console ausführe, müsste man dies ja so machen:
"java FileSearcher.java Suchwort Pfad"
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:
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
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
Moin user1234,
Gar nicht - siehe weiter unten.
Nicht leer - 'args[1]' existiert dann nicht, ein Zugriff darauf ergibt folglich 'ArrayOutOfBounds'.
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:
oder so:
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
Gar nicht - siehe weiter unten.
"java FileSearcher.java file.txt"
Dort würde das file.txt ja args sein und args[1] wäre leer. Richtig?
Dort würde das file.txt ja args 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:
java programm.java --t=Suchbegriff --p=Suchpfad
java programm.java /t=Suchbegriff /p=Suchpfad
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