[Java] String aller args[]

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von maliniak, 4. November 2012 .

Schlagworte:
  1. 4. November 2012
    String aller args[]

    Hallo liebe community.
    Ich brauche für mein programm einen string namens gtext der alle parameter der kommandozeile bis auf die ersten zwei in einen string abspeichert. leider krieg ich dass irgendwie nicht hin. das programm soll später so funktionieren und via cmd so aufgerufen werden. java krypt 3 true DAS IST DER TEXT. Der string den ich benötige soll also DAS IST DER TEXT beinhalten.

    Wenn jemand rat weiss bitte ich um hilfe ^^
     
  2. 4. November 2012
    AW: java frage string aller args[]

    Du machst ne for-Schleife mit nem Counter..
    Solange der kleiner argc ist lese argv in die String-Variable..

    Viel Spaß beim proggen..
     
  3. 5. November 2012
    AW: java frage string aller args[]

    Code:
    public static void main(String[] args)
    {
     String text = "";
     for(int i=0; i<args.length;i++) //Durchlaufe komplettes Array
     {
     if(i>1) //Ersten beiden Einträge überspringen
     {
     text += args[i]+" "; //Leerzeichen nicht vergessen :)
     }
     }
    }
    
    Sollte so passen, konnte es nicht testen.
     
  4. 6. November 2012
    AW: java frage string aller args[]

    Der code wird allerdings ein problem wenn das Programm mit weniger als 3 Argumenten aufgerufen wird. Ich würd vorher die länge des array überprüfen und dann die schleife direkt bei 2 beginnen lassen
     
  5. 6. November 2012
    AW: java frage string aller args[]

    Jein.

    Fast gut. Eher:
    Code:
    public static void main(String[] args)
    {
     String text = "";
     for(int i=2; i<args.length; i++)
     {
     text += args[i]+" "; //Leerzeichen nicht vergessen :)
     }
    }
    
     
  6. 6. November 2012
    Zuletzt bearbeitet: 6. November 2012
    AW: String aller args[]

    Oder wenn man auf Einzeiler steht, so wie ich:

    Arrays.toString(Arrays.copyOfRange(args, 2, args.length)).replace(", ", " ").replace("[", "").replace("]", "");

    Code:
    import java.util.Arrays;
    
    public class Main {
     public static void main(String[] args) {
     String concat = Arrays.toString(Arrays.copyOfRange(args, 2, args.length)).replace(", ", " ").replace("[", "").replace("]", "");
     System.out.println(concat);
     }
    }
    //Edit: hier noch mit Fehlerbehandlung, falls das Array weniger als 2 Elemente hat:
    Code:
     public static void main(String[] args) {
     String conactArgs = args.length >= 2 ? Arrays.toString(Arrays.copyOfRange(args, 2, args.length)).replace(", ", " ").replace("[", "").replace("]", "") : "";
     System.out.println(conactArgs);
     }
     
  7. 6. November 2012
    Zuletzt bearbeitet: 6. November 2012
    AW: String aller args[]


    Hi.

    Einzeiler sehen wirklich total elitär aus. Leider ist der Code schlecht lesbar / debugbar und unschön. Ehrlich gesagt finde ich solche Einzeiler total . Mal ganz abgesehen von der Performance mit diesem Array-gefriemel in Alex²'s code (auch wenn Performance hier unwichtig ist).

    Meine persönliche Präfernz ist die Extended For-Loop:

    Code:
    public static void main(String[] args) {
     String gtext = "";
     int counter = 0;
     for (String argument : args) {
     if (counter > 1) {
     gtext += argument +" ";
     } 
     counter++;
     }
    }
    
    So fliegt zumindest keine ArrayIndexOutOfBoundsException. Und man kann den Code auf den ersten Blick verstehen.
     
    1 Person gefällt das.
  8. 6. November 2012
    AW: String aller args[]

    Die erweiterte for-schleife ist ne feine Sache um über ein komplette Collection zu iterieren, aber in diesem Fall Quatsch. Du möchtest nur einen Teil des Arrays und weisst genau ab welchem Index, da musst du nicht über aller Elemente iterieren und die ersten beiden wieder wegschmeißen.

    Die fliegt bei keiner der hier geposteten Lösungen...

    Ich finde Chillikids Lösung am saubersten. Würde vielleicht noch einen StringBuilder verwenden. Ist in diesem Kontext zwar nicht nötig, ist aber nicht verkehrt sich das bei String-Manipulationen grundsätzlich anzugewöhnen.

    Gruß,
    Figger
     
    1 Person gefällt das.
  9. 6. November 2012
    Zuletzt bearbeitet: 6. November 2012
    AW: String aller args[]

    Danke für den Hinweis.

    Da hast du Recht. Muss am Feierabendbier liegen. Chillikid's zweite Lösung ist wirklich die bisher beste/schönste.

    Da habe ich Alex²'s Code gelesen und habe in Rage völlig blind drauf los getippt. Im Nachhinein muss ich sagen, dass meiner nicht besser ist.
     
    1 Person gefällt das.
  10. 6. November 2012
    Zuletzt bearbeitet: 6. November 2012
    AW: String aller args[]

    Was glaubst du warum ich das mit dem Einzeiler so betont habe? Mir ist klar, dass das keine Ansprüche von CleanCode erfüllt. Wenn du mal eine anderen Postings liest, sollte dir zusätzlich klar werden, dass das nicht mein Stil ist.

    Gibt keinen Grund hier zu ragen, weil ich mir 'nen Spaß erlaubt habe, der zusätzlich den Leuten die API ein wenig näher bringt. Unfassbar - hier bevor du in Tränen ausbrichst:

    Code:
    import java.util.Arrays;
    
    public class Main {
    
     public static void main(String[] args) {
     String[] cutArgs = Arrays.copyOfRange(args, 2, args.length);
     String concat = concatStringArray(cutArgs, " ");
    
     }
    
     private static String concatStringArray(String[] array, String seperator) {
     StringBuilder stringBuilder = new StringBuilder();
     for (String element : array) {
     stringBuilder.append(element + seperator);
     }
     return stringBuilder.toString().trim();
     }
    }
    
    Das ist die beste Lösung, was Wartbarkeit angeht. Da lässt sich meiner Meinung nach auch nicht viel drüber reden. Abgesehen davon, dass man am Ende einen Seperator zu viel hat, wenn dieser kein Leerzeichen ist.

    //Achja, zu deiner Performance Argumentation (welche vollkommen irrelevant ist):

    "copyOfRange" läuft auf

    Code:
    public static [B]native[/B] void arraycopy(Object src, int srcPos,
     Object dest, int destPos,
     int length);
    aus der "System.java|class" hinaus, wenn man sich mal den JRE-Source anschaut. Der Rest wird von der VM ohnehin so stark optimiert, dass kein Unterschied mehr zu erkennen sein sollte.

    Der Unterschied ist also noch geringer, als du also ohnehin schon angenommen hast.

    http://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest

     
  11. 6. November 2012
    AW: String aller args[]

    Alex

    Lesbare und performante Einzeiler lassen sich in funktionalen Programmiersprachen wunderbar schreiben - in Java hingegen ist (leider?) fast immer der imperative Ansatz vorzuziehen.
    Und deine zweite Lösung ist sicherlich sehr sauber und natürlich durch die Funktion wiederverwendbar aber für das gegebene Problem mMn einfach etwas over-the-top.
     
  12. 6. November 2012
    AW: String aller args[]

    Aus welchem Grund genau? Du kannst für diesen Anwendungsfall den Kram auch in eine Funktion packen, dann hast du nicht wesentlich mehr Code als bei den anderen Lösungen und dennoch einen sauberen Ansatz.
     
  13. 7. November 2012
    AW: String aller args[]

    Das stimmt selbstverständlich. Wenn du das ganze als Funktion haben willst, z.B. weil du davon ausgehst, dass du diesen Anwendungsfall noch öfter hast, ist dein Ansatz sehr gut.

    Die ursprüngliche Fragestellung hörte sich mMn nur überhaupt nicht danach an und lässt außerdem auf keine bis sehr geringe Programmierkenntnisse beim TE schließen. Daher finde ich (als Antwort in diesem Thread) die simple for-Schleife geeigneter (hier nochmal best-practice mit StringBuilder wobei das wohl auch eher unnötig ist):
    Code:
    public class Main {
     public static void main(String[] args) {
     StringBuilder stringBuilder = new StringBuilder();
     for (int i = 2; i < args.length; i++) {
     stringBuilder.append(args[i] + " ");
     }
     }
    }
    
     
  14. 7. November 2012
    AW: String aller args[]

    Wenn hier schon wieder über solche Belanglosigkeiten diskutiert wird, darf ich natürlich nicht fehlen:

    Code:
    public static String join(int s, String[] a, String g)
    {
     int l = a.length, t = l - 1;
     if (l <= s) return "";
     if (t <= s) return a[t];
    
     StringBuilder b = new StringBuilder();
     for (int i = s; i < t; ++i)
     b.append(a[i]).append(g);
    
     b.append(a[t]);
     return b.toString();
    }
    Code:
    String[] a = { "fail1", "fail2", "hello", "world" };
    String b = join(2, a, " "); // hello world
     
  15. 7. November 2012
    Zuletzt bearbeitet: 7. November 2012
    AW: String aller args[]

    Bald haben wir so ziemlich alles:

    - Eine simple Lösung
    - Eine wartbare / wiederverwendbare Lösung
    - Einen Einzeiler
    - Murdocs Lösung

    Ich glaube viel mehr bekommen wir hier nicht zusammen :lol:

    Daran sieht man übrigens mal wieder, dass es in diesem Bereich an interessanten Problemen mangelt.

    Ansonsten hört sich der ganze TE post sehr stark nach Hausaufgaben an (Nennung des Variablennamens etc), welche wir hier sowieso nicht erledigen sollten. Wenn man so was nicht gebacken bekommt mangelt es auch ganz klar an Grundlagenkenntnis.
     
  16. 7. November 2012
    AW: String aller args[]

    Das ist es doch warum ich diesen Bereich so liebe

    Du hast ganz recht, hier gibt's einfach zu wenige interessante Themen, so dass man sich in diesen Belanglosigkeiten verliert, einfach um sich ein bisschen übers Programmieren und ähnliches unterhalten zu können. :]
     
    1 Person gefällt das.
  17. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.