String an einem abschnitt ändern

missionare

Mitglied
Hallo!

Ich möchte den String umändern. Das heisst es soll ab dem Abschnitt Berichte überall ein ? vor dem * setzen. Mein Freund Google hatte einiges dazu ausgespuckt, jedoch habe ich es nicht verstanden.

Kann mir einer ein Bsp. geben oder zummindest eine Ansatz wie ich das löschen kann?

So ist mein String aufgebaut:

Code:
Meeting 03.02.14
== News ==
* bla bla bla
* bla bla bla
* bla bla bla

== Berichte ==
 = Max Mustermann =
* bla bla bla
* bla bla bla

= Maxime Musterfrau =
* bla bla bla
* bla bla bla

So sollte es nacher aussehen:

Code:
Meeting 03.02.14
== News ==
* bla bla bla
* bla bla bla
* bla bla bla

== Berichte ==
= Max Mustermann =
*?  bla bla bla
*? bla bla bla

= Maxime Musterfrau =
*? bla bla bla
*? bla bla bla

Und ich dachte ich könnte das so machen aber es funktioniert nicht.

Java:
String strFrom = "*";
String strTo = "*?";
String strTxt = "== Berichte ==";

if(strTxt == "== Berichte ==") {
str.replace(strFrom, strTo);
}

Habt ihr einen Lösungsansatz, ein beisipel Code oder sont irgenteine Idee, wie ich das umsetzen kann?
 
Sieh dir die API Dokumentation an.
String (Java Platform SE 7 )

Mit indexOf("== Berichte ==") kannst du herausfinden ab wo du anfangen musst die "*" zu ersetzen.
Dann brauchst du noch substring(index) und replaceAll("\\*", "*?").
Die zwei \ sind nötig, weil der erste String ein regulärer Ausdruck ist und * eine spezielle Bedeutung hat.
 
Zuletzt bearbeitet:
Regex sind nicht jedermanns Sache,
vor Java5 haben wir das so gemacht:

Java:
    /**
     * replace substrings within string.
     */
    public static final String replace(
            final String pStr, 
            final String pStrToReplace, 
            final String pStrNew)
    {
        if ( pStr == null )
        {
            return null;
        }
        
        // hier solltest Du besser den StringBuilder verwenden
        final StringBuffer strBuff = new StringBuffer();
        int srcPos = 0;
        int replacePos;
        while ( srcPos < pStr.length() &&
                    ( replacePos = pStr.indexOf( pStrToReplace , srcPos ) ) > -1 )
        {
                strBuff.append( pStr.substring( srcPos , replacePos ) );
                strBuff.append( pStrNew );
                srcPos = replacePos + pStrToReplace.length();
        }
        strBuff.append( pStr.substring( srcPos ) );

        return strBuff.toStringAndClear();
    }
 
Halli hallo!

Ich war in letzter Zeit beschäft mit Dokumentationen schreiben, darum konnte ich nicht eher antworten. Nebenbei habe ich ein Tutorial gemacht der mir indexOf näher bringen soll.

Funktionieren tuts immernochnicht (irgentwas überseh ich...) aber ich habe es mal probiert....

Java:
		String string = new String();
		int i = 0;
		while (true) {
			int found = string.indexOf("== Berichte ==", i);
			if (found == -1) break;
			int start = found + 1;
			int end = string.indexOf(":", start);
			System.out.println(string.substring(start, end));
			i = end + 1;
		}

Habe ich soweit den richtigen ansatz?


lg missio
 
Nach meiner Meinung ist Dein Algorithmus falsch.

Der "== Berichte =="-String wird nur einmal gesucht.

Deshalb sollte

Java:
int found = string.indexOf("== Berichte ==", i);

nicht in einer Schleife stehen.

Die Abfrage, ob es überhaupt einen Treffer gab

Java:
if (found == -1)

ist gut, ich würde die aber vor der Schleife unterbringen.

Warum Du dann plötzlich nach einem Doppelpunkt suchst,
verstehe ich nicht,
Du wolltest doch Sternchen ersetzen/ergänzen?
 
Nach meiner Meinung ist Dein Algorithmus falsch.

Warum Du dann plötzlich nach einem Doppelpunkt suchst,
verstehe ich nicht,
Du wolltest doch Sternchen ersetzen/ergänzen?


Sorry, ist ein Fehler von mir.

So sollte es aussehen?

Java:
        int i = 0;
 int found = str.indexOf("== Berichte ==", i);
 if (found == -1) break;
        while (true) {
            int start = found + 1;
            int end = str.indexOf("*", start);
            System.out.println(str.substring(start, end));
            i = end + 1;
        }

Ich frag mich aber wo ich nun die * in *? umändern kann?
 
Zuletzt bearbeitet:
Das break in Zeile 3 bricht nichts ab, da ist keine Schleife drumherum.

Die anschliessende while-Schleife hat kein Abbruch-Kriterium.

Du solltest Dich erst an die Postion des "== Berichte =="-Strings ranarbeiten und abbrechen, wenn dieser nicht da ist.
Weil es dort keine Schleife gibt, benutzt Du eben if-else.

Dann in einer Schleife nach den Sternchen suchen,
eventuell mit zusätzlichem Kriterium, dass vor dem Sternchen ein Zeilenumbruch ist.

Diese Schleife kannst Du dann mit break oder eine while( boolean-Variable ) abbrechen.
 
@barista

Ich werds nochmal anschauen.


@ALL

Ich habe eine neue frage und zwar, ich habe meinen String:

Code:
Meeting 03.02.14
== News ==
* bla bla bla
* bla bla bla
* bla bla bla

== Berichte ==
 = Max Mustermann =
* bla bla bla
* bla bla bla

= Maxime Musterfrau =
* bla bla bla
* bla bla bla

Wie kann ich dies umsetzen? Irgent ein Beispiel Code?
 
Ich dachte an sowas we BufferedReader oder Scanner aber ich hab keinen Ahnung wie ich dies umsetzen soll.


Java:
Scanner scanner = new Scanner(String str);

Wie schon gesagt, ich habe keine Ahnung.


lg
 
Ich habe mal eine Frage:

Deine Java-Kentnisse sind leider nicht so ausgeprägt. Wie sollen wir Dir helfen, wenn du die einfach sachen nicht in einen klaren Kontext bringen kannst?
 


Java:
BufferedReader reader = null;

try {
    File file = new File("Dein/Pfad");
    reader = new BufferedReader(new FileReader(file));

    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }

} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
 
Den String erhalte ich von meiner DokuWiki-Seite. Währ daher ein StringBuffer nicht sinnvoller?

Sowas in der Art: ...

Java:
StringBuffer strBuff = null;

try {
     strBuff = new StringBuffer(pageId);

     String line;
     strBuff = new StringBuffer(pageId);
		 
     String line;
     while ((line = strBuff.substring(0)) != null)
     {
          System.out.println(line);
     }
} finally {
}
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben