String von vorne nach hinten an einem Zeichen

ocsme

Top Contributor
Guten Tag,

der Titel ist vielleicht etwas doof geschrieben. Ich suche gerade nach einer effizienten Lösungen wie ich einen String z. B.:

Java:
String test = "cs.fhm.edu";

umwandele zu: edu.fhm.cs
Also von vorne nach hinten umsortiere an einem Zeichen wie hier Beispielsweise der Punkt.
Meine erste Idee war das ganze wieder über Arrays zu lösen das wird aber sehr schnell recht Komplex und auch nicht wirklich schön.
Dann dachte ich an einen Stack doch muss wirklich für so eine "kleine" Aufgabe gleich eine ganzen Datenstruktur her?

Vielleicht denke ich auch wieder unnötig Kompliziert.
Hat da vielleicht jemand eine Idee?

LG
 
Warum sollte das ganze mit Arrays kompliziert werden?
Java:
String z = "cs.fhm.edu";
String[] splits = z.split("\\.");
StringJoiner joiner = new StringJoiner(".");
for(int i = splits.length -1; i >= 0; i--) {
    joiner.add(splits[i]);
}
System.out.println(joiner);
 
StringJoiner joiner ist mir Unbekannt! Aber der ist ja mal super cool 🙂
Das mit der Split Methode ja ja an die hab ich auch nicht gedacht.
Mein Ansatz war bis jetzt so:
Java:
String s = "cs.fhm.edu";
        char[] c = new char[s.length()];
        int count = 0;
        int length = s.length()-1;
       
        for(int i=0;i<s.length();i++) {
            if(s.charAt(i) == '.') {
                count = i + 1 ;
                for(int k=count;k>0;k--) {
                    c[length]=s.charAt(k);
                    length--;
                }
            }
        }
       
        for(int i=0;i<c.length;i++)
            System.out.println(c[i]);

Das ganze läuft aber noch nicht! Deswegen kam es mir sehr Komplex vor. Denn da fehlt noch das Umdrehen des Strings des weiteren stimmt die Anpassung zum count noch nicht so hämmert er immer wieder von Angang an rüber und schreibt es ins Char Array. Hab bis jetzt nur 10 Minuten dran gesessen und dachte das kann nicht sein 😀
Deswegen auch gleich der Post hier 🙂

So sieht das ganze ja schon viel schöner aus. Ich weiß ich muss die Methoden lernen die Java einem mitgibt 🙂 Dachte nur es gäbe da vielleicht einen 0815 Algorithmus zu "diesem" Problem 😀 denn ich auch mal wieder (noch) nicht kenne! 😀

LG
 
Java:
import static java.util.Arrays.stream;
public static String reverseAtDot(String input) {
  return java.util.Arrays
    .stream(input.split("\\."))
    .reduce((s1, s2) -> s2 + '.' + s1)
    .orElse(null);
}
 
😵 Danke auch die httpdigest für die super Lösung 🙂 aber da verstehe ich wie alt so oft nix 🙁 das ganze hatte ich noch nicht.
Mein Problem ist einfach mich zu Lösen von dem Gedanken man muss nicht alles neu schreiben.
Wie würde man so ein Problem lösen in C z. B. da hat man die ganzen Methoden / Objekte etc. nicht. Deswegen suche ich oft nach Lösungen die nur mit Elementaren Anweisungen gelöst werden 😀

LG
 
Hat vielleicht noch jemand eine Idee wie man es gelöst bekommt nur über Schleifen ich stehe da total wieder auf dem Schlauch 🙁
 
Hier fehlt nur noch der rest 😀

Eingabe: cs.fhm.edu
Ausgabe: .fhm.cs
Er geht ja nur bis zum zweiten Punkt danach ist Schluss. Derzeit habe ich noch keine Lösung gefunden 😀


Java:
String s = "cs.fhm.edu";
        int count = 0;
        int length = s.length();
        System.out.println(length);
        char[] c = new char[length];
       
        for(int i=0;i<s.length();i++)
            if(s.charAt(i) == '.') {
                for(int j=i-1;j>=count;j--) {
                    System.out.println(j+" "+s.charAt(j));
                    length--;
                    c[length]=s.charAt(j);
                   
                }
                length--;
                c[length]='.';
                count=i+1;
            }
       
        for(int i=0;i<c.length;i++)
            System.out.println(c[i]);
 
so erledigt ist zwar total doof da ich so viele Schleifen habe. Leider weiß ich auch nicht wie ich es anders machen kann als vorher zu Prüfen wieviel Punkte im String sind. Naja so geht es jedenfalls auch 😀

Java:
String s = "cs.fhm.edu";
        int count = 0;
        int length = s.length();
        System.out.println(length);
        char[] c = new char[length];
        int anzahlPunkte = 0;
        int q=0;
        for(int i=0;i<s.length();i++)
            if(s.charAt(i) == '.')
                anzahlPunkte++;
       
        for(int i=0;i<s.length();i++) {
            if(anzahlPunkte>0) {
                if(s.charAt(i) == '.') {
                    for(int j=i-1;j>=count;j--) {
                        System.out.println(j+" "+s.charAt(j));
                        length--;
                        c[length]=s.charAt(j);
                       
                    }
                    length--;
                    c[length]='.';
                    count=i+1;
                    anzahlPunkte--;
                }
            }
            else {
                c[q]=s.charAt(i);
                q++;
            }
        }
           
        for(int i=0;i<c.length;i++)
            System.out.print(c[i]);
 
Nicht so kompliziert 🙂
Java:
  public static void main(String[] args) {
    System.out.println(reverseAtNeedle("cs.fhm.edu", '.'));
    System.out.println(reverseAtNeedle("cs.fhm.",'.'));
    System.out.println(reverseAtNeedle(".fhm.edu",'.'));
    System.out.println(reverseAtNeedle(".fhm.",'.'));
  }
 
 
  public static String reverseAtNeedle(String target, char needle) {
    char[] chars = target.toCharArray();
 
    String part = "";
    String result = "";

    for(int i = target.length() - 1; i >= 0; i--) {
      if(chars[i] == needle) {
        result += part + needle;
        part = "";
      } else {
         part = chars[i] + part;
      }
    }
    return result + part;
  }
Code:
edu.fhm.cs
.fhm.cs
edu.fhm.
.fhm.
 
Gewinnt auch keinen Schönheitswettbewerb, aber ist etwas kürzer. Ich speichere immer den zuletzt gefundenen Punkt temporär.

Java:
public class Program
{
    public static void main(String[] args) {
      
        String s = "cs.fhm.edu.erer";
        String gedreht = "";
        int letzterPunkt =  s.length();
      
        for(int i = s.length()-1;i>=0;i--) {
            if(s.charAt(i) == '.') {
              
                for (int j = i+1;j<letzterPunkt;j++){
                    gedreht += s.charAt(j);
                }
                gedreht += ".";
                letzterPunkt = i;
            }
        }
        for (int j = 0;j<letzterPunkt;j++){
            gedreht += s.charAt(j);
        }
    System.out.println(gedreht);

    }
}

da war jemand schneller 🙂
 
Autsch Kopfschüttelnd !!!
Hatte vor kurzem schon mal eine Aufgabe gemacht war ähnlich wie diese. Dort ist mir dann später aufgefallen "Hey geht einfacher wenn man von Hinten ran geht!" 🙂D Hört sich etwas komisch an wenn ich es so schreibe 😀)
Ja da habe ich mal wieder um 1000 Ecken gedacht.

Danke an euch alle 🙂 für die Super schnelle Antworten und echt Klasse Programme 🙂 kann man gut gebrauchen 🙂

Liebe Grüße 🙂
 

Zurück
Oben