String splitten und nacheinander löschen

2

23paul23

Gast
Hallo,

ich habe eine Liste mit Namen vom Typ String. Diese werden durch eine Komma getrennt in eine Tabellen-Zelle geschrieben mit folgendem code
Java:
StringBuilder sb = new StringBuilder();
list.add(name)
for(Iterator<String> iter = list.iterator(); iter.hasNext();)
{
	sb.append(iter.next());
}
column.setValue(column.getValue() + sb.toString() + ", "); //z.B. wie folgt: Hans, Peter, Dieter,

Nun möchte ich einzelne Namen aus der Zelle wieder löschen.
Dazu habe ich mir gedacht, dass ich den gesamten Inhalt der Zelle an ein String übergebe und diese durch das Trennzeichen "," splitte und in eine neue Liste hinzufüge. Somit könnte ich nur die Namen löschen aber die Kommas würden in der Zelle weiterhin existieren. Also wie folgt:
Java:
String splitName;
String[] afterSplit;
List<String> list = new ArrayList<String>();
String delimiter = ",";
splitName = column.getValue(); // splitName = Hans, Peter, Dieter,
afterSplit = splitName.split(delimiter); // afterSplit = [Hans, Peter, Dieter] natürlich ohne Komma im Array
for(int i=0; i<splitName.length; i++)
{
       list.add(afterSplit[i]); 
}

Wie kann ich jetzt z.B. die Abfrage definieren, wenn Hans gefunden wird, das Hans inklusive das nächste Komma gelöscht werden können?
Java:
if(name == "Hans")
{
      .... // es soll dann in der Zelle nur noch "Peter, Dieter," stehen. 
}

Vielen Dank
 

Marco13

Top Contributor
Klingt schräg. Strings vergleicht man mit
if (name.equals("Hans")) { ... }

Spricht etwas dagegen, den Namen mit list.remove(name) aus der Liste zu entfernen, und den String neu zu bauen? Da mit string.split und Kommasuche usw. rumzuwurschteln wirkt... zerbrechlich (nicht nur wenn jemand in seinen Namen fieserweise ein Komma einbaut :D )
 
2

23paul23

Gast
sorry wegen dem tippfehler :) :)

list.remove(name) war auch mein erster versuch, daber dann war die frage wie ich die kommas löschen kann.
anscheinend bleibt mir nichts übrig, als den zellen-wert immer wieder neu zu bauen.
 

Marco13

Top Contributor
Doch, es bleibt dir was anderes übrig. Du KANNST auch den String auseinanderpflücken und die Kommas per Hand entfernen. Es ging nur um die Frage, was einfacher ist...
 
2

23paul23

Gast
hallo

noch mal kurz meine ausgangslage:

Zelleninhalt: Hans, Peter, Dieter, Paul

Zelleninhalt soll nach und nach gelöscht werden, z.B. (dir Reihenfolge spielt keine Rolle):
1. Hans, Dieter, Paul //Peter wird mit Komma entfernt
2. Hans, Dieter // Paul wird mit Komma entfernt
3. Dieter //Hans wird mit Komma entfenrt
4 // Dieter wird entfernt und die Zelle bleibt leer

Mein bisheriges Programm:

Java:
public void addNamesInCell()
{
        List<String> nameList = new ArrayList<String>();
	StringBuilder sb = new StringBuilder();
        nameList.add(names); // Annahme: Hans, Peter, Dieter, Paul wurden hinzugefügt

	for(Iterator<String> iter = nameList.iterator(); iter.hasNext();)
	{
		sb.append(iter.next()); 
	}
				
	if(!column.getValue().contains(names) && column.getValue().length()<1)
	{
		column.setValue(sb.toString()); // falls noch kein Name vorhanden ist, dann soll der Name ohne ein Komma eingetragen werden
	}
	if(!column.getValue().contains(names) && column.getValue().length()>0)
	{
		column.setValue(column.getValue() + ", " + sb.toString()); //falls schon ein Name vorhanden ist, dann soll der neue Name nach einem Komma eingetragen werden
	}
}

Die Namen sollen jetzt einzeln aus der Zelle entfernt werden aber weiterhin durch Kommas getrennt werden.

Java:
public deleteNamesInCell()
{
        String temp;
	String delimiter = ",";
	String[] splitedNames;
	List<String> splitedList = new ArrayList<String>();
	StringBuilder sb = new StringBuilder();

        temp = column.getValue(); // z.B. temp = Hans, Peter, Dieter, Paul
        splitedNames = temp.split(delimiter);
        for(int i=0; i<splitedNames.length; i++)
        {
                splitedList.add(splitedNames[i]); // in der Liste sind jetzt die Namen ohne Kommas enthalten
        }

        if(splitedList.contains(name)) //z.B. ist name = Peter
        {
                splitedList.remove(name); //Peter wird aus der Liste enfernt
                for(Iterator<String> iter ) splitedList.iterator(); iter.hasNext();)
                {
                        sb.append(iter.next()); // bzgl. den übrig gebliebenen Namen werden iteriert
                }
                if(column.getValue().length()>0) //?
                {
                        column.setValue(...); //? In der Zelle sollen die Namen Hans, Dieter, Paul stehen. Jeweils immer durch ein Komma getrennt, damit beim nächsten Durchlauf wieder bzgl. dem Komma gesplittet werden kann. 
                }
                if(column.getValue()==0)
                {
                        System.out.println("Alle Namen wurden entfernt");
                }
        }
}

Mein Problem ist die if-Bedingung in der Zeile 23 von der Methode deleteNameInCell() zu definieren. Wie kann dich der Zelle die übrig gebliebenen Namen, die wiederrum durch ein Komma getrennt sind, übergeben?
Für jede Hilfestellung bin ich dankbar.
 
2

23paul23

Gast
Ein KSKB ist schwierig, weil das ganze Programm sehr komplex ist und als Plug-in erweitert wird.

Ich kann höchstens abstrakt die Reihenfolge darstellen, wann was aufgerufen wird:

Java:
public class MainClass
{
AddDeleteClass adClass = new AddDeleteClass();

public static void main(String [ ] args)
{
       ...

       if(name=soll hinzugefügt werden) //die namen werden von einer anderen Tabelle gelesen
       {
              addNameInCell(name); // hatte vorhin vergessen, dass diese Methode als Parameter ein String übergeben bekommt
       }

       if(name=soll entfernt werden)
       {
              deleteNameInCell(name); //ebenfalls Parameter vom Typ String
       }
       ...
}
}

public class AddDeleteClass
{
       public void addNamesInCell(String names)
       {
              // siehe unten
       }

       public void deleteNamesInCell(String names)
       {
              // siehe unten
       }
}

Einen kompletten Auszug kann ich leider nicht posten, weil das sehr komplex ist und ich nur einen teilbereich mir angucke.
Mir fehlt die Idee wie ich die if-Bedingung realisieren kann.
 
2

23paul23

Gast
Wo ich gerade mir noch mal den Code anschaue, fällt mir auf, dass die letzen beiden if-abfragen aus der Methode delteNamesInCell(String names) wie folgt sein müssen

Java:
if(splitedList.size()>0)
{
      //solange die Liste noch Namen enthält, sollen diese in die Celle geschrieben werden
}

if(splitedList.size()==0)
{
      System.out.println("Alle Namen wurden entfernt");
}
 
2

23paul23

Gast
wenn ich
Java:
if(splitedList.size()>0)
{
       column.setValue(sb.toString);        
}
verwendet, dann steht in der Zelle, z.B. folgendes: Hans Dieter Paul. Also jeweil ohne Komma.

Ich überlege gerade diese Wert (colum.getValue()) bezgl. den Leerzeichen zu trennen, in eine Liste zu speichern und analog der Methode addNamesInCell(String names) als neuen Wert durch Kommas getrennt in die Zelle zu schreiben.

Mir fällt nichts anderes ein.
 

Mizar

Aktives Mitglied
Nur so eine Idee, aber wäre etwas in dieser Richtung nichts für dich?
Java:
public class Main
{
	public static void main(String[] args)
	{
		AddDeleteClass adClass = new AddDeleteClass();
		
		adClass.addNameToCell("Jochen");
		adClass.addNameToCell("Hans");
		adClass.addNameToCell("Beate");
		adClass.deleteNameFromCell("Hans");
		adClass.addNamesToCell(new String[]{"Jochen", "Beate"});
		adClass.addNameToCell("Beate");
		adClass.addNameToCell("Matthias");
		adClass.deleteNamesFromCell(new String[]{"Karl", "Susi", "Heinz"});
	}
}

class AddDeleteClass
{
	private LinkedList<String> data;
	
	public AddDeleteClass()
	{
		this.data = new LinkedList<String>();
	}
	
	public void addNameToCell(String name)
	{
		if(!data.contains(name)) {
			data.add(name);
			setColumnContent();
		}
	}
	
	public void addNamesToCell(String[] names)
	{
		int oldSize = data.size();
		for(String name: names) {
			if(!data.contains(name)) {
				data.add(name);
			}
		}
		if(oldSize != data.size()) {
			setColumnContent();
		}
	}
	
	public void deleteNameFromCell(String name)
	{
		if(data.contains(name)) {
			data.remove(name);
			setColumnContent();
		}
	}
	
	public void deleteNamesFromCell(String[] names)
	{
		if(data.removeAll(Arrays.asList(names))) {
			setColumnContent();
		}
	}
	
	private void setColumnContent()
	{
		StringBuilder str = new StringBuilder();
		if(!data.isEmpty()) {
			str.append(data.getFirst());
			for(int i = 1; i < data.size(); ++i) {
				str.append(", " + data.get(i));
			}
		}
		// Hier entsprechend Zelleninhalt neu setzen, je nachdem
		// wie genau du Zugriff auf die Zelle hast.
		// Als Test nur eine Konsolenausgabe:
		System.out.println(str);
	}
}
 
2

23paul23

Gast
Hallo,

habe das Problem meiner Meinung nach einfacher gelöst. habe die methode replaceAll verwendet um die enthaltenen namen (mit oder ohne komma) einfach durch ein leerzeichen zu ersetzen. anschließend werden alle doppelten leerzeichen entfernt.

Java:
String value, temp, newValue;
value = column.getValue();
if(value.contains(names))
{
       if(value.contains(names + ",")      
       {
       temp = value.replaceAll(names + ",", ""); //ersetze name mit nachfolgendem komam durch ""
       newValue = temp.replaceAll("  ", " "); //ersetzte alle doppelten leerzeichen durch ein leerzeichen
       column.setValue(newValue);
       value = column.getValue(); //überprüfe für den nächsten durchlauf den aktuellen zelleninhalt
       }

       if(value.contains(", " + names)      
       {
       temp = value.replaceAll(", " + names, ""); //ersetze name mit vorstehendem komam durch ""
       newValue = temp.replaceAll("  ", " "); //ersetzte alle doppelten leerzeichen durch ein leerzeichen
       column.setValue(newValue);
       value = column.getValue();
       }

       if(value.contains(names)      
       {
       temp = value.replaceAll(names, ""); //ersetze name mit vorstehendem komam durch ""
       newValue = temp.replaceAll("  ", " "); //ersetzte alle doppelten leerzeichen durch ein leerzeichen
       column.setValue(newValue);
       value = column.getValue();
       }
}
 

Marco13

Top Contributor
Bei
Code:
Hans , Wurst
    ^ Leerzeichen-Komma-Leerzeichen
haut's ihn da wohl raus, aber ist vielleicht nur ein Datei. Die "modellorientierteste" (und IMHO mit "robusteste") Lösung hatte ich ja schon in der ersten Antwort angedeutet, und Mizar hat dann ein Beispiel dafür ausgearbeitet.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T String splitten Java Basics - Anfänger-Themen 3
S Nutzereingabe splitten und in string array wieder ausgeben. Java Basics - Anfänger-Themen 1
CptK Datentypen String splitten, ä,ö,ü, etc ignorieren Java Basics - Anfänger-Themen 1
J String splitten Java Basics - Anfänger-Themen 3
A String mit mehreren Zeilen splitten Java Basics - Anfänger-Themen 4
J String splitten und weiter einarbeiten in einer Methode? Java Basics - Anfänger-Themen 11
S String splitten und berichtigen? Java Basics - Anfänger-Themen 16
Z String splitten Java Basics - Anfänger-Themen 2
S String ab dem Wechsel Buchstaben zu Zahlen splitten Java Basics - Anfänger-Themen 14
S String splitten und in ArrayList speichern Java Basics - Anfänger-Themen 4
A String Mehrfach Splitten Java Basics - Anfänger-Themen 1
B String in in bestimmten abschnitten splitten Java Basics - Anfänger-Themen 2
H String splitten Java Basics - Anfänger-Themen 6
S String Splitten Java Basics - Anfänger-Themen 2
T String splitten Java Basics - Anfänger-Themen 2
C Methoden String richtig splitten Java Basics - Anfänger-Themen 5
C Regex String splitten Java Basics - Anfänger-Themen 5
T String splitten beim wechsel vom buchstabe zu zahl! Java Basics - Anfänger-Themen 8
J Datentypen String splitten ohne festen Ausdruck Java Basics - Anfänger-Themen 8
T String in String Array splitten Java Basics - Anfänger-Themen 4
StrikeTom String mehrmals splitten Java Basics - Anfänger-Themen 11
S String in Integer Array splitten Java Basics - Anfänger-Themen 2
A String nach bestimmten kriterien splitten Java Basics - Anfänger-Themen 13
M String splitten mit split() Java Basics - Anfänger-Themen 4
T String splitten Java Basics - Anfänger-Themen 2
K String splitten Java Basics - Anfänger-Themen 4
S String splitten Java Basics - Anfänger-Themen 4
O String splitten Java Basics - Anfänger-Themen 9
M String splitten Java Basics - Anfänger-Themen 2
G String nach Pluszeichen splitten Java Basics - Anfänger-Themen 2
G String splitten Java Basics - Anfänger-Themen 3
T String splitten und auf fehler abfragen Java Basics - Anfänger-Themen 3
U String splitten Java Basics - Anfänger-Themen 12
J Java Aufgabe -> String einlesen, splitten,Substring & Java Basics - Anfänger-Themen 3
loadbrain String splitten Java Basics - Anfänger-Themen 3
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
J String Filter Java Basics - Anfänger-Themen 5
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D 2D Char Array into String Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
I Zerlegen von String Java Basics - Anfänger-Themen 3
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
I String Java Basics - Anfänger-Themen 4
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
I Eindeutiger String mit maximaler Anzahl an Zeichen Java Basics - Anfänger-Themen 11
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
Alen123 String wiederholen mit Schleifen Java Basics - Anfänger-Themen 1
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
T Platzhalter in String? Java Basics - Anfänger-Themen 14
M String mit Variable vergleichen Java Basics - Anfänger-Themen 9
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben