Zeichen in String löschen

Status
Nicht offen für weitere Antworten.

evil

Aktives Mitglied
Hallooo, ich mal wieder.. *nerv*

Ich hab ein Problem mit einer Anweisung. Und zwar, soll über die Kommandozeile folgendes eingegeben werden:

java Programmname "hallo"

Dann sollen die ersten beiden stellen vom Wort gelöscht werden und ans Ende gehangen werden. Also:
lloha.

Java:
class Verschieben {
	static String verschieben(String neu) {
		StringBuffer sb = new StringBuffer();
		String s = sb.toString();
		return neu.toString();
	}
	
	public static void main(String[] args) {
		Out.println(verschieben(args[0]) + args[0].charAt(0) 
			+ args[0].charAt(1));
		
	}
}

Jetzt fehlt mir die Anweisung zum löschen. Eigentlich wollte ich es mit s.delete(from, to) machen und hatte dies in die 5. Zeile eingefügt. Der Compiler zeigt mir allerdings einen Fehler. ;(
 
Ich habs grad mal bisschen nachgegoggelt und zumindest das Löschen von Zeichen kriegst mit Replace wohl hin.

Code:
String s = "Hai";
s = s.Replace( "i", "" );

Das heißt du ersetzt, die Stelle an der sich das i befindet durch einen leeren String und entfernst somit das Zeichen.
 
das Problem dabei ist aber, dass ich nicht weiß, welche Buchstaben an den ersten beiden Stellen sind. Bei deinem Beispiel wird ja das i gelöscht, wenn ich das richtig verstanden hab
 
ich hätte das mal mit substring probiert.

Java Docu hat gesagt.:
Konstruktor mit einem Parameter:
Examples:
"unhappy".substring(2) returns "happy"
"Harbison".substring(3) returns "bison"
"emptiness".substring(9) returns "" (an empty string)

Konstruktor mit zwei Parameter (anfangs und endwert)
Examples:
"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"
 
Zuletzt bearbeitet:
wenn die anforderung so statisch ist (also immer die ersten 2 ans ende)
Java:
StringBuilder builder = new StringBuilder(args[0].substring(2);
builder.append(args[0].charAt(0)).append(args[0].charAt(1));
System.out.println(builder.toString());
ansonsten ist es natuerlich auch leicht zu generalisieren
Java:
        String s = "hallo";
        int i = 2;

        StringBuilder builder = new StringBuilder(s.substring(i));
        for (int j = 0; j < i; j++) {
            builder.append(s.charAt(j));
        }
        System.out.println(builder.toString());
 
Mit StringBuffer gibts einige Möglichkeiten.
Java:
    public static void main(String[] args) {
        if(args.length == 1) {
            StringBuffer sb = new StringBuffer();
            sb.append(args[0]).append(sb.substring(0, 2));
            System.out.println(sb.delete(0, 2).toString());
        }
    }
 
Vielleicht noch als Hinweis: Die Klassen StringBuffer und StringBuilder (neu seit JRE 5) sind gleich aufgebaut. Der StringBuffer ist allerdings thread save und damit zur Laufzeit deutlich aufwändiger als der StringBuilder. Wenn man den Puffer also nur in einem Thread oder ohnehin in synchronisierten Bereichen verwendet, sollte man StringBuilder statt StringBuffer benutzen.

Ebenius
 
Hab ich besonders erwähnt, weil direkt drüber noch ein Beispiel mit StringBuilder ist (wahrscheinlich gleichzeitig mit Deinem verfasst)...

Ebenius
 
Irgendwie klappt das bei mir nicht
Java:
class Verschieben {
	static String verschieben(String neu) {
		StringBuffer sb = new StringBuffer();
		sb.append(args[0]).append(sb.substring(0, 2));
		sb.delete(0, 2);
		return neu.toString();
	}
	
	public static void main(String[] args) {
		Out.println(verschieben(args[0]));
		
	}
}

Der Compiler mag das "args" in sb.append nicht *verzweifel*
 
Es muss dann heißen:
[JAVA=4]sb.append(neu).append(sb.substring(0, 2));[/code]

Und benutze lieber doch den StringBuilder, der hat die gleichen Methoden.
 
Leider haben wir noch nichts mit dem StringBuilder gemacht. Nur normale Strings und Stringbuffer.

Also irgendwas läuft da doch schief. jetzt hab ich das so geändert wie ihr gesagt habt. Append soll mir das hinten dran hängen und delete löscht die ersten beiden Buchstaben.

Java:
sb.append(neu).append(sb.substring(0, 2)).delete(0, 2);

gebe ich aber nun in die Kommandozeile java Programmname hallo ein, wird hallo unverändert wieder ausggegeben
 
Statt: [java=6]return neu.toString();[/code]
[java=9]return sb.toString();[/code]

Ebenius
 
Zuletzt bearbeitet:
Ahhh, ihr seid Gold wert!!
Ich glaube ihr werdet mich heute noch öfters hier dumme Fragen stellen sehen 🙁


Vielen Dank:toll:
 
Ich würde das übrigens gar nicht mit dem StringBuilder / StringBuffer machen. Eher so:
Java:
static String verschieben(String alt) {
  final int len = neu.length;
  final char[] neu = new char[len];
  for(int i = 0; i < len; i ++) {
    neu[i] = alt.charAt((i + 2 ) % len);
  }
  return new String(neu);
}
Hinweis: Die andere Methode mit StringBuilder / StringBuffer schmiert Dir ab, wenn der String kürzer als zwei Zeichen ist. Das muss in jedem Fall abgefangen werden.

BTW: Nicht vergessen: http://www.java-forum.org/forum-faq-beitraege/86306-thema-erledigt-markieren.html

Ebenius
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben