Letztes Zeichen eines Strings enfernen

Taso44

Mitglied
Hallo zusammen,
gibt es vielleicht eine Möglichkeit einen String auszugeben und das letzte, nicht erwünschte Zeichen zu
ignorieren/löschen.
Meine Aufgabe besteht daraus, dass ich einen String array habe. Jedes der enthaltenen Wörter in dem Array
muss in ein String geschrieben werden. Nach jedem Wort muss ein Trennzeichen stehen.
Beispiel: String[]text = {"apfel", "banane", "orange"}
char zeichen = ';' ;
Ergebnis: String: apfel;banane;orange
Leider ist das Ergebnis: apfel;banane;orange;

Mein Code:

public class Stringkonka {

public static void main(String[] args) {

String[] text = { "apfel", "banane", "orange" };
char zeichen = ';';
System.out.println(konka(text, zeichen));
}

public static String konka(String[] text, char zeichen) {
// Ergebnis
String result = "";

// Array durchlaufen
for (int i = 0; i < text.length; i++) {
// result mit dem array befüllten
result += text;
result += zeichen;


}
return result;
}

}



Das Programm funktioniert soweit nur dass beispielsweise nach "...orange;" das letzte Semikolon ausgegeben wird,
was nicht erwünscht ist.
Ich habe zwar im Internet die replace Methode gefunden, aber würde gerne einen eigenen Weg
ohne zur Verfügung gestellte Methode versuchen.

Danke sehr.

PS: Habs leider nicht geschafft meinen Code in diesen Block zu packen, der hier im Forum verwendet wird. Könnte mir vielleicht kurz
jmd erklären wie ich das mache. Danke
 
Zuletzt bearbeitet:

Robert Zenz

Bekanntes Mitglied
Leider habe ich diese Sache wo man seinen Code
hier im Forum, in diese "Blöcke" schreiben kann nicht gefunden.

Der erste Button in der Toolbar waere der Knopf der Wahl. Damit kannst du dann deinen Code formatieren lassen als Code.

...gibt es vielleicht eine Möglichkeit einen String auszugeben und das letzte, nicht erwünschte Zeichen zu
ignorieren/löschen.

Du suchst vermutlich nach der String.substring(int, int)-Methode, mit welchem du einen beliebigen Teil des Strings ziehen kannst.
 

Taso44

Mitglied
Der erste Button in der Toolbar waere der Knopf der Wahl. Damit kannst du dann deinen Code formatieren lassen als Code.



Du suchst vermutlich nach der String.substring(int, int)-Methode, mit welchem du einen beliebigen Teil des Strings ziehen kannst.
Könnte eine Möglichekeit sein ich versuche es mal. Danke
Und auch das mit dem Codeblock.
(Hab den Beitrag jetzt gefühlte 10x bearbeitet ich Versuche das mit dem Block beim nächsten mal Danke .) )
 

Robert Zenz

Bekanntes Mitglied
Zwei Sachen dazu. Das erste ist, wenn du einen "String" in einer Schleife zusammen baust mit einer unbekannten Menge an Teilschritten, dann sollte man einen "StringBuilder" verwenden, da dieser "sparsamer" mit dem Speucher umgeht:

Java:
StringBuilder builder = new StringBuilder();

for (String item : array) {
    builder.append(item).append(";");
}

builder.delete(builder.length() - 1, builder.length()); // Zeile geraten, musst du testen.

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

Zweitens, die langweilige Antwort, welche nicht unbedingt Idee der Aufgabe ist, waere "String.join(String, String...)".
 

auel0

Mitglied
Es gibt dafür 3 Wege, wobei ich den 3. bevorzugen würde:

Java:
import org.apache.commons.lang3.StringUtils;

public class Stringkonka {
    public static void main(String[] args) {
        String[] text = {"apfel", "banane", "orange"};
        char zeichen = ';';
        System.out.println(konka_1(text, zeichen));
        System.out.println(konka_2(text, zeichen));
        System.out.println(konka_3(text, zeichen));
    }

    public static String konka_1(String[] text, char zeichen) {
// Ergebnis
        String result = "";
// Array durchlaufen
        for (int i = 0; i < text.length; i++) {
// result mit dem array befüllten
            result += text[i];
            result += zeichen;
        }
        return result.substring(0, result.length() - 1);
    }

    public static String konka_2(String[] text, char zeichen) {
// Ergebnis
        String result = "";
// Array durchlaufen
        for (int i = 0; i < text.length; i++) {
// result mit dem array befüllten
            result += text[i];
            if (i < text.length - 1) {
                result += zeichen;
            }
        }
        return result;
    }

    public static String konka_3(String[] text, char zeichen) {
// Ergebnis
        String result = "";
// Array durchlaufen
        for (int i = 0; i < text.length; i++) {
// result mit dem array befüllten
            result += text[i];
            result += zeichen;
        }
        return StringUtils.left(result, result.length() - 1);
    }
}

Um StringUtils nutzen zu können, musst du noch deine pom.xml um commons-lang3 ergänzen:

XML:
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>
 

kneitzel

Top Contributor
Zum einen sind zu dem Code schon diverse Dinge gesagt worden - zum einen das mit dem StringBuilder und zum anderen der Hinweis, dass das eine Funktionalität ist, die das Java Framework doch bereits hat.

Generell ist es aber doch immer zu bevorzugen, dass man nur das erzeugt, das man braucht. Also das Trennzeichen wird am Ende am Besten erst gar nicht gesetzt. Und da gibt es genug Möglichkeiten. Wenn man schon bei dem Zusammensetzen mit + bleibt, dann kann man ggf. result mit dem ersten String initialisieren (mit Validierung um den leeren String bei leerem Array zurück zu geben) um dann die Schleife bei 1 zu starten.

1 und 3 entfällt - wenn diese Möglichkeiten bestehen, dann besteht auch die Möglichkeit, den StringJoiner zu nutzen. -> Code entfällt komplett.

Wenn man dies aber außer Acht lässt: Eine Library einbinden um eine Zeile Code mit einer anderen Zeile Code zu ersetzen? Der Code wird in keiner Weise lesbarer, es wird nichts gewonnen. Und auch die Aussage, dass eine 0 als (erster) Parameter da irgend eine Form von "Code Smell" sein soll, müsste einmal begründet werden. Das wäre sogar ein Literal innerhalb des Codes, den ich als Literal so stehen lassen würde.

Off Topic: Ist der Account @NullCharm (temporär) gesperrt? Fällt von der Art und Weise halt doch etwas auf ... neuer Account und gleich so am pöbeln ...
 

mihe7

Top Contributor
Dieses substring-Gemurkse habe ich noch nie verstanden und sieht für mir wie replace(".", ",") zum Formatieren von Zahlen aus wie gewollt und nicht gekonnt.

Wenn ich drei Semmeln brauche, gehe ich auch nicht in die Metzgerei: "Ich hätte gerne drei Leberkässemmeln, aber bitte machen Sie den Leberkäs runter".
 

kneitzel

Top Contributor
Wie gesagt, eine Lösung habe ich gezeigt und das Anti-Pattern genannt. Für Verständnisschwierigkeiten von anderen kann ich ja nichts.
Zu Deinen Lösungen / der Problematik wurde auch schon genug gesagt / kritisiert.

Ansonsten ist es schön, dass Du uns Deine Meinung gesagt hast, nur eben schade, dass es keine Argumente für diese Meinung zu geben scheint.

Off Topic:
Dann möchte ich aber kurz sagen, was ich für ein Anti-Pattern in Diskussionen halte: Wenn Dinge ohne jede Argumentation genannt werden. Und das am Besten noch bezüglich Regeln ("Anti-Pattern"). So kann man Meinungen sagen. Du bist der Meinung, dass die eine Lösung schöner ist als die Andere. Ohne jedes Argument ist es aber nicht möglich, andere davon zu überzeugen - zumal ja schon:
a) bessere Lösungen genannt wurden
b) Argumente genannt wurden, die gegen Dein Anti-Pattern sprechen (Die wir auch noch gerne weiter ausführen könnten so Dir unklar ist, wieso es unvorteilhaft sein kann, z.B. wild weitere Libraries einzubinden...)

Damit ist das aber dann auch für mich erledigt. Jeder, der den Thread liest wird für sich schon zu einem Ergebnis kommen ...
 

Barista

Top Contributor
Man kann auch das Hinzufügen des unerwünschten Trennzeichens (Semikolon) von vornherein vermeiden:
stringJoin:
public static String joinArrayWithDelimiterSemicolon(final Object[] arr) {
    if (arr == null || arr.length == 0) {
        return "";
    }
    
    String result = String.valueOf(arr[0]);
    
    for ( int i = 1 ; i < arr.length; i++ ) {
        result += ';';
        result += arr[i];
    }
    
    return result;
}

Diesen Code kann man auch gern durch die Verwendung des StringBuilders optimieren.
 

mihe7

Top Contributor
Man kann auch das Hinzufügen des unerwünschten Trennzeichens (Semikolon) von vornherein vermeiden:
Ja, das hat @kneitzel oben schon beschrieben :) Man kann das natürlich auf verschiedenste Weisen implementieren. Mit dem StringJoiner würde die Schleife noch einfacher, mit dem von @Robert Zenz genannten String.join ein Einzeiler, ebenso könnte man Streams und einen joining-Collector verwenden. Nur substring... das geht gar nicht :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Letztes zeichen eines strings löschen Allgemeine Java-Themen 3
S String in Double - letztes Zeichen fehlt Allgemeine Java-Themen 4
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
B Finde letztes veränderte File Allgemeine Java-Themen 4
Master3000 Komisches Zeichen als Ausgabe in der Konsole Allgemeine Java-Themen 20
Mart Warum gibt es Unterschiedliche Kommentar Zeichen Allgemeine Java-Themen 15
N Überprüfung ob ein bestimmtes Zeichen <1 mal vorkommt Allgemeine Java-Themen 2
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
G Übermittlung zusätzlicher ASCII-Zeichen bei Übertragung von Dateiinhalt mit Xmodem - JAVA Allgemeine Java-Themen 9
R Wie bekomme ich das Zeichen 'digit' an vorderster Stelle Allgemeine Java-Themen 4
S [Regex] Nur diese Zeichen beachten Allgemeine Java-Themen 1
Bluedaishi Zeile um zeichen erweitern Allgemeine Java-Themen 9
N Datei Zeilenweise Einlesen, Versteckte Zeichen Allgemeine Java-Themen 5
Xge Replace x Zeichen aus String Allgemeine Java-Themen 2
S Java Editor Bekomme bei der Code-Vervollständigung die Zeichen &#8203; Allgemeine Java-Themen 3
E Compiler-Fehler Unicode Zeichen einlesen Allgemeine Java-Themen 1
U Variablen Stringarrays mit wenig verschiedenen Zeichen effizienter speichern Allgemeine Java-Themen 10
T xls-Datei per Apache Commons CsvParser einlesen UTF-8 Zeichen russische Zeichen Allgemeine Java-Themen 2
AssELAss String jeweils nach x Zeichen Zeilenumbruch Allgemeine Java-Themen 1
DStrohma Input/Output KeyEvent nur verarbeiten wenn es ein "sichtbares" Zeichen ist? Allgemeine Java-Themen 1
B In Java String ein + Zeichen Allgemeine Java-Themen 4
AssELAss Zeilenumbruch immer nach bestimmtem Zeichen Allgemeine Java-Themen 1
J Anzahl der Zeichen bei Eingabe begrenzen Allgemeine Java-Themen 5
V Tastendruck für UTF-8 Zeichen emulieren Allgemeine Java-Themen 4
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
C Hex Zeichen ersetzen durch leer Zeichen Allgemeine Java-Themen 5
R Besondere Zeichen in Dateinamen Allgemeine Java-Themen 4
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
G AES Verschlüsselung nur bis 63 Zeichen Länge Allgemeine Java-Themen 2
M Fehlende Zeichen beim Drucken mit PDFBox Allgemeine Java-Themen 10
J String nur erste Zeichen vergleichen Allgemeine Java-Themen 6
C Variablen $-Zeichen in String ersetzen Allgemeine Java-Themen 3
S String Zeichen für Zeichen vergleichen Allgemeine Java-Themen 4
L Problem bei ausführbarer jar Datei mit Unicode-Zeichen Allgemeine Java-Themen 4
A Erstes Zeichen im String "toUpperCase"n Allgemeine Java-Themen 11
A Umwandlung von Text/Zeichen in Polynome Allgemeine Java-Themen 8
cedi int Zahl in ein ASCII zeichen umwandeln und dieses in ein externes Textfenster schreiben Allgemeine Java-Themen 6
K String: alle X Zeichen Zeilenumbruch Allgemeine Java-Themen 3
M Nach Programmdurchlauf werden Zeichen falsch dargestellt + Anderes Verhalten unter Windows Allgemeine Java-Themen 6
Zettelkasten Aus String bestimmtes Zeichen herausfinden Allgemeine Java-Themen 19
M Asterisk in String ("Egal-Zeichen") Allgemeine Java-Themen 4
V Chinesische Zeichen Escapen Allgemeine Java-Themen 4
I Teilweise falsche Darstellung jap. Zeichen im JEditorPane mit RTFEditorKit aus RTF-Datei Allgemeine Java-Themen 5
D Datei mit allen Ascii Zeichen Allgemeine Java-Themen 2
R Unsichtbare Zeichen Allgemeine Java-Themen 7
U Namen von Klassen haben $-Zeichen Allgemeine Java-Themen 5
P RegEx und $-Zeichen als Literal Allgemeine Java-Themen 5
neonfly Anzahl Zeichen pro Zeile auf der Konsole Allgemeine Java-Themen 8
C Strings zwischen 2 Zeichen auslesen Allgemeine Java-Themen 7
A Zeichen beim Eingeben in ein DOS-Fenster nicht anzeigen? Allgemeine Java-Themen 3
F Hexcode von ASCII Zeichen erhalten Allgemeine Java-Themen 2
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
V Dateien mit &-Zeichen im Namen öffnen Allgemeine Java-Themen 13
N String in einzelne Zeichen zerlegen Allgemeine Java-Themen 8
M Problem mit Zeichen aus einer Datei auslesen Allgemeine Java-Themen 2
T Shapes vergleichen? Zeichen erkennen? Allgemeine Java-Themen 7
G String.replaceall - mehrere Zeichen durch eines ersetzen Allgemeine Java-Themen 5
G Tschechische Zeichen in XML-Antwort Allgemeine Java-Themen 22
J Encoding und Gewinnung von Zeichen aus der Hexa-Darstellung Allgemeine Java-Themen 6
N Xor Warum kommt Flasches Zeichen in Java Allgemeine Java-Themen 36
S Stringarray splitten an unbekanntem Zeichen Allgemeine Java-Themen 7
A Dezimalzahlen: Komma-Zeichen Allgemeine Java-Themen 4
T Einzelnes Zeichen von der Tastatur einlesen, aber ohne Enter Allgemeine Java-Themen 4
S Was bedeutet dieser Zeichen Allgemeine Java-Themen 4
E Wie Zeichen eingeben mit Klasse Scanner? Allgemeine Java-Themen 5
S Zeichen, dass Programm noch läuft Allgemeine Java-Themen 3
M Anwendung nur einmal starten / Zeichen in String zählen Allgemeine Java-Themen 7
T [Regex] Zeichen ausschließen Allgemeine Java-Themen 8
Luma Unicode Steuerzeichen von druckbaren Zeichen trennen Allgemeine Java-Themen 10
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
G String parsen und Problem mit escaped zeichen Allgemeine Java-Themen 4
A bestimmte Zeichen aus einem String auslesen Allgemeine Java-Themen 2
L unicode-zeichen in ein txt-File schreiben Allgemeine Java-Themen 3
J Problem mit nichtlateinischen Zeichen Allgemeine Java-Themen 2
B String + Zeilenumbruch nach X-Zeichen Allgemeine Java-Themen 4
M Nach 4 Zeichen Fokus ändern Allgemeine Java-Themen 2
oliver1974 Wie ResourceBundles mit Unicode Zeichen korrekt einlesen? Allgemeine Java-Themen 4
E Alarm ausgeben (ASCII Zeichen 7) über Lautsprecher Allgemeine Java-Themen 11
G Alle Zeichen des Alphabets ausgeben Allgemeine Java-Themen 4
K String-Objekt mit zig tausend Zeichen Allgemeine Java-Themen 12
T Muster/Zeichen/Texterkennung auf einem Image Allgemeine Java-Themen 9
Y Zeichen verschiedenfarbig in einer JTextPane darstellen Allgemeine Java-Themen 17
P Regulärer Ausdruck um sich wiederholende Zeichen zu finden. Allgemeine Java-Themen 9
O Split methode tut bei Zeichen "\", "\\" Allgemeine Java-Themen 7
H Unicode Darstellung in Java, spezielles Zeichen gesucht Allgemeine Java-Themen 4
S Unicode-Zeichen erstellen/ Kodierung Allgemeine Java-Themen 4
J RegEx: "wenn zeichen folgen ersetze x mit y, sonst mit Allgemeine Java-Themen 2
Z Zeichen/char in einer Datei löschen Allgemeine Java-Themen 6
I $ zeichen im class-namen Allgemeine Java-Themen 4
S ￾ Zeichen umwandeln in ü per .replace(); Allgemeine Java-Themen 6
N Zeilenumbruch in String nach jeweils x Zeichen einfügen? Allgemeine Java-Themen 6
D gewisse Zeichen sind nach dem entschlüsseln anders Allgemeine Java-Themen 2
G Wandeln von Char Wert in Zeichen? Allgemeine Java-Themen 2
G subString() aber nicht auf Länge sondern auf Zeichen Allgemeine Java-Themen 3
L Hex --> Dezimal --> Zeichen Allgemeine Java-Themen 7
M Codepage Problem (Vertauscht Zeichen beim Lesen aus Datei) Allgemeine Java-Themen 3
C Unicode für Promille-Zeichen Allgemeine Java-Themen 5
rambozola anzahl zeichen in konsole eclipse begrenzt? Allgemeine Java-Themen 5
F Bestimmes zeichen im String zählen Allgemeine Java-Themen 34
D commapi lesen, auf zeichen warten. Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben