Stringmanipulation

Hijo2006

Aktives Mitglied
Guten Morgen,

ich suche zwei Statements zur Manipulation eines Strings:
a) alle führenden Ziffern entfernen (nur die am Anfang): Also "123String45" -> "String45"
b) Abschneiden des Endes eines Stringes, wenn ein Suffix beginnend mit "/" vorliegt: Also "String/S789" ->"String"

Danke
 

Thallius

Top Contributor
Regex ist in diesem Fall aber auch mal wieder mit Kanonen auf Spatzen schiessen. Das läßt sich methodisch auch sehr einfach lösen.
 

JStein52

Top Contributor
Probier z.B. mal das:

Code:
            String s = "123Hallo";
            s=s.replaceAll("^[0-9]*", "");
            System.out.println("Expression "+s);
 

TheFrog

Aktives Mitglied
Ich mach sowas auch immer mit Regex. In Java gibt es alternativ die String Methoden startsWith, endsWith, contains. Damit kannst du einen String untersuchen und entsprechend mit der Methode replace handeln. Dies finde ich aber sehr umständlich ;)
 

StarSheriff

Mitglied
Ich bin zwar auch der Meinung, dass das nach Regex schreit, wenn man aber tatsächlich ohne auskommen will, probier mal folgendes:

Java:
    private void cutString(String input) {

        boolean foundStart = false;
        StringBuilder builder = new StringBuilder();
        for (char c : input.toCharArray())
        {
            if (!foundStart && c >= 48 && c <= 57)
            {
                continue;
            }
            else
            {
                foundStart = true;
                if (c != 47)
                {
                    builder.append(c);
                }
                else
                {
                    break;
                }
               
            }
        }
               
        System.out.println(builder.toString());
    }
 

tommysenf

Top Contributor
Code:
 private static String cutNumbers(String input) {

        for (char c : input.toCharArray()) {
          if (c < 48 || c > 57) return input.substring(input.indexOf(c));
        }      
        return "";
    }

   private static String cutSlash(String input) {

        int idx = input.indexOf('/');
        return idx < 0 ? input : input.substring(0,idx);
    }
 
Zuletzt bearbeitet:

tommysenf

Top Contributor
Jetzt fehlt nur noch dass einer mit Lambda-Expressions daherkommt
Naja hat alles seine Vor- und Nachteile vor allem wenn man mit großen Datenmengen arbeitet. Wobei mich die Lambda Lösung wirklich interessieren würde.
Lambdas lassen sich oft gut parallelisieren. RegEx lässt sich schnell implementieren. Stringmanipulation ist dafür meist wesentlich schneller als RegEx. In diesem Fall um den Faktor 10.
 

Flown

Administrator
Mitarbeiter
Lambdas sind nur anonyme Funktionen, sie werden genau so aussehen wie die Lösungen oben, nur eben im Stil: s -> s.substring(...)
 

Hijo2006

Aktives Mitglied
Vielleicht hat sie ja z.B. das zweite Pattern alleine hingekriegt bzw. damit herumexperimentiert. Es hilft ja wenn man mal was funktionierendes als Ausgangspunkt hat. Wir waren doch auch mal froh darüber.

danke. und ich bin einfach jemand, der mit Beispielen lernt.
ich könnte viel dazu sagen, was über mein lernvermögen hier impliziert wird,
aber ehrlich: ich habe auch Fähigkeiten, die nix mit java zu tun haben.
sorry, das musste sein, da mich diese Arroganz des spartenwissenden
schon nervt.

aber hier geht es ja noch: die junx aus den linuxforen sind richtig übel
 

Hijo2006

Aktives Mitglied
Aber was hast du davon jetzt gelernt? Nix! Wenn du jetzt ein anderes RegEx Pantern brauchst Must du wieder hier nachfragen.

ja, mag sein. tut mir leid, wenn ich unwissend als anfängerin was frage.
aber mag sein, dass mich der sinn des forums täuscht. dachte es geht um fragen und antworten, aber wohl dann doch eher um das zeigen, wer den "größten " hat.
sorry, aber das sind mit die gründe, warum frauen sich so unwohl in dem bereich fühlen.
 
X

Xyz1

Gast
Hier mal was von mir:
Java:
package tempjavaapplication;

/**
 * blablabla
 * @author
 */
public class TempJavaApplication {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String test = "123String45";
        while (Character.isDigit(test.charAt(0))) {
            test = test.substring(1);
        }
        System.out.println("test = " + test);

        test = "String/S789";
        int i = 0;
        while (test.charAt(i++) != '/')
            ;
        test = test.substring(0, i - 1);
        System.out.println("test = " + test);
    }
}

Ihr habt vergessen, dass es Character gibt - und Zeichen vergleicht man mit 'X'.

Aber gleich dazu, dass ich keine kompletten Methoden hab - und die Zeichen den Ausdrücken entsprechen müssen.
 

flopalko

Bekanntes Mitglied
ja, mag sein. tut mir leid, wenn ich unwissend als anfängerin was frage.
aber mag sein, dass mich der sinn des forums täuscht. dachte es geht um fragen und antworten, aber wohl dann doch eher um das zeigen, wer den "größten " hat.
sorry, aber das sind mit die gründe, warum frauen sich so unwohl in dem bereich fühlen.
Wieso weil Frauen immer den kleinsten weil nicht vorhanden haben?^^ Na Spaß beiseite. Diese Aussage war sicher nicht auf dein Geschlecht bezogen, sondern einfach dass es sinnvoller wäre, dass du dich selbst mit RegEx Pattern beschäftigst und diese verstehst als hier die fertige Lösung zu erhalten.
Ich finde aber auch, dass man aus Beispielen sehr gut lernt und finde daher die fertige Lösung nicht schlecht, schau dir aber trotzdem an wie diese Pattern funktionieren ;)
 

tommysenf

Top Contributor
und Zeichen vergleicht man mit 'X'
Hää???
P.S.: und du hast vergessen, dass man Strings nicht unnötigerweise in Schleifen erstellen sollte...

Lambdas sind nur anonyme Funktionen, sie werden genau so aussehen wie die Lösungen oben, nur eben im Stil: s -> s.substring(...)

Schon klar, ich meinte auch eher mit der Stream API also über String#chars(), da man sich ja innerhalb der filter Funktion einen State merken müsste...
 
X

Xyz1

Gast
Mir ist gerad aufgefallen, dass es viel schnellere Lösungen gibt, wenn man nur die Indexes berechnet.
ja, mag sein. tut mir leid, wenn ich unwissend als anfängerin was frage.
aber mag sein, dass mich der sinn des forums täuscht. dachte es geht um fragen und antworten, aber wohl dann doch eher um das zeigen, wer den "größten " hat.
sorry, aber das sind mit die gründe, warum frauen sich so unwohl in dem bereich fühlen.

Und was sollen wir jetzt tun? Über Frauenquoten diskutieren? - Das liegt einfach daran, dass Info nicht im Interessenbereich der meisten Frauen liegt - nicht weil irgendjemand unfreundlich ist, oder es zu schwer ist.

Spaßeshalber hab ich mich mal in eine Erziehungswissenschaften-Vorlesung gesetzt - da kam ich mir auch sehr _hilflos_ vor. ... ...
 

Hijo2006

Aktives Mitglied
Mir ist gerad aufgefallen, dass es viel schnellere Lösungen gibt, wenn man nur die Indexes berechnet.


Und was sollen wir jetzt tun? Über Frauenquoten diskutieren? - Das liegt einfach daran, dass Info nicht im Interessenbereich der meisten Frauen liegt - nicht weil irgendjemand unfreundlich ist, oder es zu schwer ist.

Spaßeshalber hab ich mich mal in eine Erziehungswissenschaften-Vorlesung gesetzt - da kam ich mir auch sehr _hilflos_ vor. ... ...


nö, nur manchmal etwas bescheidener sein, wenn man zufällig mal etwas besser weiss. das ist alles. aber wie immer: die aus dem forum sind explizit ausgenommen..grins
 
X

Xyz1

Gast
Ja, aber ich weiß alles besser. Das ist ja mein Problem.

Und Senf: Sei mal etwas freundlicher, sonst gibt's Schelle. :D
 

Thallius

Top Contributor
Meine Antwort sollte einfach mal zum nachdenken anregen.

Du benutzt jetzt eine sehr mächtige extrem komplexe API mit RegEx für eine Funktionalität, die mit einer kleinen Schleife (Beispiele gibt es hier ja nun mitlerweile genug) ganz leicht selber zu programmieren gewesen wäre. Hättest du dir die Mühe gemacht es selber zu programmieren hättest du jetzt was gelernt. So hast du nichts gelernt außer das es RegEx gibt aber nicht einmal wie es funktioniert und wie man es selbständig anwendet.

Aber jeder wie er mag....
 

Hijo2006

Aktives Mitglied
Meine Antwort sollte einfach mal zum nachdenken anregen.

Du benutzt jetzt eine sehr mächtige extrem komplexe API mit RegEx für eine Funktionalität, die mit einer kleinen Schleife (Beispiele gibt es hier ja nun mitlerweile genug) ganz leicht selber zu programmieren gewesen wäre. Hättest du dir die Mühe gemacht es selber zu programmieren hättest du jetzt was gelernt. So hast du nichts gelernt außer das es RegEx gibt aber nicht einmal wie es funktioniert und wie man es selbständig anwendet.

Aber jeder wie er mag....

stimmt, du hast umfassend Recht.
schon doof mit dem freien Willen eines Menschen, dass man ihn nicht zwangs-beglücken kann ...smile
 

flopalko

Bekanntes Mitglied
stimmt, du hast umfassend Recht.
schon doof mit dem freien Willen eines Menschen, dass man ihn nicht zwangs-beglücken kann ...smile
Die Aussage ist schon etwas frech, zumal wenn man bedenkt dass du dich zuerst darüber aufregst dass man dich auf Grund deines Geschlechts benachteiligt (was niemand getan hat!). Sinnvoller wäre es in der Tat ohne RegEx mit Schleife gewesen, du hast nun Mal von Anfang an RegEx präsentiert bekommen und gerade bei denen finde ich, dass man sehr wohl mit Beispielen diese gut verstehen und anhand dessen lernen kann.
 

Flown

Administrator
Mitarbeiter
Schon klar, ich meinte auch eher mit der Stream API also über String#chars(), da man sich ja innerhalb der filter Funktion einen State merken müsste...
Java 9:
Java:
UnaryOperator<String> transform = s -> s.codePoints().dropWhile(c -> '0' <= c && c <= '9').takeWhile(c -> c != '/')
    .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append);
 
X

Xyz1

Gast
1. Insgesamt ist es hier schon sehr freundlich :) ,
2. das kann ein Gutes oder Schlechtes Zeichen sein,
3. nicht c < 48 || c > 57, sondern c < '0' || c > '9',
4. wir driften ab in Off-topic,
5. weniger Frauen studieren Info, da ... (viele Gründe),
6. in Erziehungswissenschaften sind auch ~ 95 % Frauen (OK, nicht ganz, aber viele?).

7. Wofür musst du das eigentlich lernen?
8. Was gefällt dir hier nicht?
9. Was könnte besser?

----
Okay, schon wieder offline. Aber wieso verlässt du uns alle ohne Lernkurve? Was habs den nicht verstanden?
Du kannst auch eine PN schicken, falls das weiter hilft. :D
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Java Themen

Neue Themen


Oben