Strings und Arrays - Expand

lu-i

Neues Mitglied
Hallo, ich habe ein paar Fragen zu einer meiner Übungsaufgaben und hoffe ihr könnt mir vielleicht weiterhelfen! :)
Und zwar ist die Aufgabe eine Klasse zu schreiben die über die Standareingabe einen Strig bekommt, welcher Zahlen und auch Buchstaben enthalten kann, allerdings keine Leerzeichen, Satzzeichen oder Umlaute vorkommen. Mein Programm soll genau einen String auf der Standardausgabe anzeigen und dabei soll die Zahl durch die Anzahl des nachfolgenden Buchstabens ersetzt werden, also so oft geschrieben werden wie die Zahl. Bsp: 3bz2u wäre dann bbbzuu.
Hier weiß ich leider gar nicht weiter, weil ich auch keinen weg kenne wie man quasi alle zahlen mit einbinden kann. Ich denke mal man muss dazu amm besten ein Array nutzen und mit der replace-methode arbeiten, aber ansonsten hab ich echt keinen plan :/

Das ist alles was ich bis jetzt habe:

Java:
import java.util.Scanner;
public class Expand {
  
   public static void main (String [] args) {
   Scanner scanner = new Scanner(System.in);
  
     String eingabe = scanner.nextLine();
     String ersetzterString = eingabe.replace (x,y);
     System.out.println (ersetzterString);

Danke schonmal für eure Hilfe!
 
Zuletzt bearbeitet von einem Moderator:

Jardcore

Top Contributor
Du kannst dir den String als CharSequence geben lassen, also quasi als Array
Dann gehst du jedes Zeichen bis zum Ende durch und schaust ob das aktuelle Zeichen eine Zahl ist.
Wenn es eine Zahl ist, schaust du zusätzlich das nächste Zeichen an (hoffentlich ist das dann ein Buchstabe). Diesen Buchstaben schreibst du dann sooft in einen neuen String wie es die Zahl vorgibt.... und dann das ganze von vorn :)

Eine Frage: in welchem Zahlenbereich sollen die Zahlen sein? 1-9? oder einfach alle natürlichen Zahlen?
 
Zuletzt bearbeitet:

StarSheriff

Mitglied
Ich würde dir empfehlen das mit Patterns der Regular Expressions zu machen:
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
(Für denn Fall dass du beliebig viele Buchstaben/Zahlen pro Paar hast, führt glaub ich auch kein Weg dran vorbei).

Damit kannst du dir ein Patter definieren, alá
- beliebig viele Ziffern (\d+), gefolgt von beliebig vielen Buchstaben (\D+)

Damit bekommst du alle Paare von Zeichenketten die zu replizieren sollst.

Für jedes Paar musst du nun noch die Anzahl und die Zeichenkette selbst extrahieren.
Das kannst du wieder über die beiden oben genannten Patterns machen, nun aber halt einzeln,
also: Anzahl, wie oft du die Zeichenkette aneinanderhängen musst, bekommst du wenn du als Pattern (\d+) verwendest, welche Zeichenkette du replizieren sollst über (\D+)
 

JStein52

Top Contributor
beliebig viele Ziffern (\d+), gefolgt von beliebig vielen Buchstaben (\D+)

Damit bekommst du alle Paare von Zeichenketten die zu replizieren sollst.
Kann es sein dass du da was falsch verstanden hast. sie müsste doch nach einer Ziffer gefolgt von einem Buchstaben suchen. Oder wie meinst du das mit deinem "Zeichenketten replizieren" ?
 

Jardcore

Top Contributor
Ich glaube die Idee ist richtig, der Ansatz in Java aber komplizierter.
Man kann durch "(?<=[0-9]+)\\D" alle Buchstaben herausfilter, die einer Zahl folgen.
Dann muss man aber noch die Zahlen filtern. Oder man benutzt den oben genannten regex und filtert sich alle Zahlen-Buchstaben Paare (also sowas wie 9d, 42a, 99999x). Hier muss man dann den gefundenen Token nochmal in Zahl und dazugehörigen Buchstaben splitten.
Der Rest sollte dann einfach sein.
 

StarSheriff

Mitglied
nehmen wir mal an die Eingangszeichenfolge ist 12ab3x4c. Dann muss doch als Ergebnis ab
abababababababababababxxxcccc rauskommen.

Deshalb also 12ab3x4c mittels \d+\D+ in
12ab
3x
4c
aufsplitten

Für diese 3 Paare dann jeweils (im Beispiel jetzt für 12ab)
mittels
\d+ die Zahl rausfiltern => 12
mittels
\D+ die Buchstabenfolge => ab
extrahieren.

For-Schleife drüber und Zusammenbau im StringBuilder ist dann selbsterklärend
 

StarSheriff

Mitglied
aso, in dem Fall könnte man, um bei obiger Logik zu bleiben bleiben, die Buchstabenfolge mittels der substring Methode in einen zu replizierenden Teil (nur erster Buchstabe) und einen einfach anzuhängenden Teil (alle übrigen) trennen.
 

Jardcore

Top Contributor
Java:
//...
public String doSomething(String eingabe) {
        String ausgabe = eingabe;
      
        Pattern pattern = Pattern.compile("[0-9]+\\D");
        Matcher matcher = pattern.matcher(eingabe);
      
        // Manipuliere Ausgangsstring
        while(matcher.find()) {
            String group = matcher.group();
            String[] split = group.split("(?<=\\d)(?=\\D)");
          
            String numberAsString = split[NUMBER_INDEX];
            int number = Integer.valueOf(numberAsString);
            String letter = split[LETTER_INDEX];
          
            ausgabe = ausgabe.replaceFirst(numberAsString, "");
            ausgabe = ausgabe.replaceFirst(letter, expandLetter(letter, number));
        }

    return ausgabe;
}
Java:
    private String expandLetter(String letter, int number) {
        return number == 0 ? "" : expandLetter(letter, --number) + letter;
    }

Eingabe : 12ab3x4c
Ausgabe : aaaaaaaaaaaabxxxcccc

Ich habe mit replaceFirst, erstmal die gefundene Zahl entfernt und dann den Buchstaben ersetzt.
 

StarSheriff

Mitglied
Da es jetzt schon ne gepostete Lösung gibt, hier noch der Java Code zu meinem geistigen Erguss :)

Java:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringRegEx {

    public static void main(String[] args) {
        StringRegEx regEx = new StringRegEx();
        regEx.doStuff("h12all3o");
    }

    private void doStuff(String stuff) {

        StringBuilder builder = new StringBuilder();

        Pattern pattern = Pattern.compile("\\d+\\D+");
        Matcher matcher = pattern.matcher(stuff);
        while (matcher.find()) {
            String digitAlpha = matcher.group();
            pattern = Pattern.compile("\\d+");
            Matcher matcher2 = pattern.matcher(digitAlpha);
            matcher2.find();
            String howOften = matcher2.group();

            pattern = Pattern.compile("\\D+");
            matcher2 = pattern.matcher(digitAlpha);
            matcher2.find();
            String stringToAdd = matcher2.group();
            String stringToReplicate = stringToAdd.substring(0, 1);
            String stringRest = "";
            if (stringToAdd.length() > 1) {
                stringRest = stringToAdd.substring(1, stringToAdd.length());
            }

            for (int i = 0; i < Integer.valueOf(howOften); i++) {
                builder.append(stringToReplicate);
            }
            builder.append(stringRest);
        }

        System.out.println(builder.toString());
    }
}
 

Flown

Administrator
Mitarbeiter
Nach dem Urlaub endlich mal ein wenig Zeit Threads aufzuarbeiten.

Also hier sind Regex doch wirklich ein kleiner Overkill?! Einfach über den String iterieren und einen Zustand überwachen:
Java:
public static String unfold(String s) {
  StringBuilder builder = new StringBuilder();
  for (int i = 0, num = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    if (Character.isDigit(c)) {
      num = num * 10 + Character.digit(c, 10);
    } else if (num != 0) {
      for (int j = 0; j < num; j++) {
        builder.append(c);
      }
      num = 0;
    } else {
      builder.append(c);
    }
  }
  return builder.toString();
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Vereinigungen und Schnittmengen von Strings/Arrays Java Basics - Anfänger-Themen 14
X Strings in Arrays speichern Java Basics - Anfänger-Themen 6
aze Arrays.binarrySearch mit Strings funktioniert nicht Java Basics - Anfänger-Themen 9
H Warum sind in Java Strings und Arrays eigentlich unveränderlich? Java Basics - Anfänger-Themen 2
V Byte Arrays in Strings umwandeln und splitten Java Basics - Anfänger-Themen 2
T Einzelne Ziffer zusammenfügen (ohne Strings oder Arrays) Java Basics - Anfänger-Themen 2
L Unterschied zwischen Objekten, Arrays und Strings Java Basics - Anfänger-Themen 2
W Gleichzeitiges ersetzen mehrerer Strings Java Basics - Anfänger-Themen 7
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
N Nachkommastellen von Strings Java Basics - Anfänger-Themen 3
T Strings unveränderlich???? Java Basics - Anfänger-Themen 22
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
S Die durchschnittliche Länge der Strings Java Basics - Anfänger-Themen 11
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
sserio StringBuilder und Strings Java Basics - Anfänger-Themen 8
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
N Strings verpflechten Java Basics - Anfänger-Themen 4
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
L Strings aneinanderhängen Java Basics - Anfänger-Themen 2
M Strings vergleichen Java Basics - Anfänger-Themen 10
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Ternärer Operator mit Strings Java Basics - Anfänger-Themen 3
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
P Verketten, Aneinanderreihen von Strings Java Basics - Anfänger-Themen 2
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
W Strings und das parsen Java Basics - Anfänger-Themen 8
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
D Vergleichen von Strings Java Basics - Anfänger-Themen 6
M Konkatenation von zwei Strings Java Basics - Anfänger-Themen 6
J Abbruchbedingung in Schleife/ Untersuchung von Strings Java Basics - Anfänger-Themen 2
S Buchstaben in Großbuchstaben (Strings) Java Basics - Anfänger-Themen 5
X Anagramm mit Strings und Methode Java Basics - Anfänger-Themen 53
P geschachtelte Schleife mit Strings Java Basics - Anfänger-Themen 2
P Strings mit der Axt zerteilen Java Basics - Anfänger-Themen 7
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
K Strings hochzählen Java Basics - Anfänger-Themen 20
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
J Unveränderbarkeit von Strings Java Basics - Anfänger-Themen 3
O Klammerung bei Strings Java Basics - Anfänger-Themen 10
A Liste aus drei Strings erstellen Java Basics - Anfänger-Themen 5
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D ergebnis.matches("[1-9]?[0-9].[0-9][0-9]?") ein teil eines größeren Strings Java Basics - Anfänger-Themen 12
J Breite eines Strings bestimmen Java Basics - Anfänger-Themen 4
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
N Vergleich von Strings schlägt fehl.. Java Basics - Anfänger-Themen 5
B 4 Strings, Anfangsbuchstaben muss unterschiedlich sein Java Basics - Anfänger-Themen 12
P Strings in String Array schreiben Java Basics - Anfänger-Themen 13
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
B mir nur die Gesamtzahl von einzigartigen Strings aus Array ausgeben lassen Java Basics - Anfänger-Themen 5
R Erste Schritte Sicheres einlesen eines Strings Java Basics - Anfänger-Themen 2
F Maximale Länge eines Strings Java Basics - Anfänger-Themen 5
J Best Practice Datum Differenz aus zwei Strings ermitteln Java Basics - Anfänger-Themen 8
Jinnai4 Strings ersetzen Java Basics - Anfänger-Themen 9
R Übergeben eines Array Strings an einen Spinner Java Basics - Anfänger-Themen 4
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
L Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind. Java Basics - Anfänger-Themen 19
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
C 2 Strings Java Basics - Anfänger-Themen 15
T befehle unterschiedlicher anzahl an strings wiedergeben Java Basics - Anfänger-Themen 2
JavaNewbie2.0 Strings in andere Klassen importieren. Java Basics - Anfänger-Themen 2
D BlueJ Java: Strings voneinander trennen Java Basics - Anfänger-Themen 11
javaerd Wie kann ich Brute Force Methode mit Strings erweitern Java Basics - Anfänger-Themen 1
R Erste Schritte Strings "einrücken" Java Basics - Anfänger-Themen 3
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
B gemeinsames Vorkommen der charactere von 2 Strings als String zurückgeben Java Basics - Anfänger-Themen 5
R Teilinhalt eines Strings testen Java Basics - Anfänger-Themen 10
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
L Werte von Strings ? Java Basics - Anfänger-Themen 1
I Schachbrett aus beliebigen Strings erstellen Java Basics - Anfänger-Themen 3
Syncopated Pandemonium Verketten von Strings funktioniert nicht Java Basics - Anfänger-Themen 4
F Wahrscheinlichkeit von Strings Java Basics - Anfänger-Themen 3
MiMa Splitten eines Strings Java Basics - Anfänger-Themen 5
T Hashfunktion für Strings Java Basics - Anfänger-Themen 3
C Zeilenumbruch für langes Strings Java Basics - Anfänger-Themen 2
J Variablen Strings mit Zeilenumbrüchen in neues Array Element Java Basics - Anfänger-Themen 1
T Datentypen compareTo() u. equals() bei Strings Java Basics - Anfänger-Themen 3
H Strings vergleichen & sortieren Java Basics - Anfänger-Themen 20
H Erste Schritte Längstes Wort eines Strings herausfinden Java Basics - Anfänger-Themen 7
D Problem beim umwandeln eines Strings in eine Dzezimalzahl Java Basics - Anfänger-Themen 6
G Strings mit Scanner (nextLine) einlesen Java Basics - Anfänger-Themen 7
T Strings ersetzen mit \ Java Basics - Anfänger-Themen 10
K Strings bearbeiten Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben