Leerzeichen zwischen jeden Buchstaben eines Strings einfügen

fhaslbs

Mitglied
Hallo erstmals. Ich bin ein 1.Lehrjahr Informatiker, und habe noch nicht viel Erfahrung mit Java. Ich bekam von meinem Chef den Auftrag, mit Java eine Anwendung zu entwicklen, die ein Textfile importiert, und dann zwischen jeden buchstaben der wörter im String ein beliebiges Zeichen einstzt.
hier der Code:
[Java]
import java.io.BufferedReader;//input eingabe
import java.io.File;//Die Klasse bietet eine große Anzahl von Methoden an, um Informationen über eine Datei oder ein Verzeichnis zu erhalten.
import java.io.FileReader;//Der FileReader liest aus Dateien entweder einzelne Zeichen, Strings oder Zeichenfelder. Wie beim Writer deklariert die Klasse Konstruktoren zur Annahme des Dateinamens. So zeigt folgendes Beispiel eine Anwendung der FileReader-Klasse.
import java.io.FileNotFoundException;//Öffnet die Datei zum Lesen über ein File-Objekt. Falls sie nicht verfügbar ist, löst der Konstruktor eine FileNotFoundException aus.
import java.io.FileWriter;
import java.io.IOException;//fehlerbehandlung
import java.i😵utputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;

public class badwordfilter
{
public static void main(String[] args) throws IOException
{
File Textdatei = new File("c://Program Files/Java/eclipse/BWF_Liste.txt");//zu lesende Textdatei
StringBuffer contents = new StringBuffer();//Kontainer, in dem die Datei abgelegt werden soll
BufferedReader reader = null;//bedeutet, dass noch auf kein objekt vorhanden ist

try//versuche:
{
reader = new BufferedReader(new FileReader(Textdatei));
String text = null;//versuche so lange zu lesen bis


while ((text = reader.readLine()) != null)//alle linien gelesen sind.
{
contents.append(text)
.append(System.getProperty(
"line.separator"));
}
} catch (FileNotFoundException e)//Fange fehlermeldung auf
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} finally//schlussendlich
{
try//Versuche
{
if (reader != null)//wenn gelesenes nciht gleich null
{
reader.close();//schliesse reader
}
} catch (IOException e)
{
e.printStackTrace();
}
}

// erbebniss
System.out.println(contents.toString());







FileWriter writer;
File file;


// File anlegen
file = new File("d://bwf/test.txt");
try {
// new FileWriter(file ,true) - falls die Datei bereits existiert
// werden die Bytes an das Ende der Datei geschrieben

// new FileWriter(file) - falls die Datei bereits existiert
// wird diese überschrieben
writer = new FileWriter(file ,true);

// Text wird in den Stream geschrieben
writer.write(contents.toString());

// Platformunabhängiger Zeilenumbruch wird in den Stream geschrieben
writer.write(System.getProperty("line.separator"));


// Schreibt den Stream in die Datei
// Sollte immer am Ende ausgeführt werden, sodass der Stream
// leer ist und alles in der Datei steht.
// Text wird in den Stream geschrieben
writer.write(contents.toString());
writer.flush();

// Schließt den Stream
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}
[/code]

der String wird schon mal in die Datei geschrieben, das sieht dann etwa so aus:

wort1
wort2
wort3
wort4

Die Wörter müssen schlussendlich Kommagetrennt sein, und eben mit beliebigen Zwischenzeichen "gefüllt" sein, also etwa so

w*o*r*t*1,
w*o*r*t*2,
w*o*r*t*3,

wie mache ich das? mit einer speziellen for-Schleife? Das Proglem ist, der Replace befehl bringt mir ja nichts, weil ja nichts ersetzt wird, sondern neu eingefügt wird ???:L
Und wie erkennt Mr. Java, dass jetzt ein neues Wort beginnt, und es zwischen den Wörtern keine Zeichen legen darf? denn die Wörter sind nicht alle gleich lang...
 
also grundsätzlich so in die richtung, wie du das jetzt am besten mit leerzeichen zwischen den wörtern machst, kommt nochmal auf die genau aufgabenstellung an...
Java:
import java.io.IOException;

public class Test {

   public static void main(String[] args) throws IOException {
      String input = "Ich hab noch nie gesehen, dass jemand Imports kommentiert.";
      String output = "";
      for (int i = 0; i < input.length(); i++) {
         if(input.charAt(i) != ' '){
            output += input.charAt(i)+"*";
         }else{
            output += input.charAt(i);
         }
      }
      System.out.println(output);

   }
}
 
ich würde das wie folgt machen:

Java:
public static void main(String[] args) {
	StringBuffer sb = new StringBuffer("Wir räumen die Kette mal von hinten auf.");
	
	for (int i = sb.length() - 1; i >= 0; i--) {
		if (sb.charAt(i) != ' ') {
			sb.insert(i, ' ');
		}
	}
	
	System.out.println(sb.toString());
}
 
ARadauers Lösung ist OK, aber man sollte in ernsthaftem Code einen StringBuilder zum Zusammensetzen verwenden, und den erst am Ende in einen String umwandeln. Generell sollte man vermeiden, Strings im Inneren einer Schleife zusammenzufügen (sofern man nicht weiß, dass es wirklich nur ein paar wenige Durchläufe sind).

[Edit]
@Eisteetrinker: Hübsche Lösung!
 
Vielen Dank euch beiden, nun funkt es ziemlich gut =)

ähnliche frage: wie bringe ich eine bestimmte zeichenkette vor und hinter jedes wort eines Strings?
mein beispiel
[java=42]
String eingelesenes =(contents.toString());
String vorstring="(?i)\b";
String nachstring="\b";
eingelesenes+=vorstring+eingelesenes+nachstring;
[/code]

das Ergebniss sollte schlussendlich so aussehen
(?i)bapfel\b
(?i)bbanane\b
usw...

es wird überhaupt nichts spannendes ausgedrücht, weder vor noch nach dem String, und schon gar nicht vor und nach den einzelnen Wörtern ;(

hat jemand Ideen?
 
Wo ist dein Problem??????

Java:
public class StringTest {
	private static String test(String pEingabe) {
		String eingelesenes = pEingabe;
		String vorstring="(?i)\b";
		String nachstring="\b";
		eingelesenes+=vorstring+eingelesenes+nachstring;
		return eingelesenes;
	}
	public static void main(String[] args) {
		System.out.println(test("Blabla"));
	}
}

output: Blabla(?i)Blabla

Du musst selbst wissen was \b machen soll - ich weiss es nicht, aber es überrascht mich nicht, dass das im output nicht richtig dargestellt wird .....
 
das Problem ist, das der String aus mehreren unter einander stehenden Wörtern besteht, das input file sieht z.B so aus:

banane
apfel
kartoffeln

das zeugs, was auf dem Bildschirm erscheint ist irelevant, der Text soll(te) in ein textfile geschrieben werden, funktioniert sogar.
hier nochmals der ganze aktuelle code:

[JAVA=42]
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

public class badwordfilter
{
public static void main(String[] args) throws IOException
{
File Textdatei = new File("C:/Users/User/Desktop/BWF_Liste.txt");
StringBuffer contents = new StringBuffer();
BufferedReader reader = null;
try
{
reader = new BufferedReader(new FileReader(Textdatei));
String text = null;

while ((text = reader.readLine()) != null)//
{
contents.append(text)
.append(System.getProperty(
"line.separator"));

}
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
if (reader != null)
{
reader.close();
}
} catch (IOException e)
{
e.printStackTrace();
}
System.out.println(contents.toString());
}
String eingelesenes =(contents.toString());
String vorstring="(?i)\b";
String nachstring="\b";
eingelesenes+=vorstring+eingelesenes+nachstring;

FileWriter writer;
File file;
file = new File("d://bwf/BWF_new.txt");
try {
writer = new FileWriter(file ,true);
writer.write(eingelesenes);
writer.flush();
writer.close();
}
catch (IOException e) {
e.printStackTrace();
}
System.out.println(contents.toString());
}
}


[/code]
 
das Problem ist, das der String aus mehreren unter einander stehenden Wörtern besteht, das input file sieht z.B so aus:

banane
apfel
kartoffeln

das zeugs, was auf dem Bildschirm erscheint ist irelevant, der Text soll(te) in ein textfile geschrieben werden, funktioniert sogar.

Grummel - mein Code ist nur dazu da zu beweisen, dass das was du machst schon mal richtig ist. Falls dein Problem an einem anderen Ort ist, hast du es vermutlich zu wenig genau beschrieben!
 
an welcher stelle genau? entschuldigung für die dumme frage, aber ich bin noch ein ziemlicher Anfänger.

[FRUSTMODE]
Warum meinen alle sie seien so ziemlich Anfänger und versuchen nicht mal den Code zu verstehen den sie als ihren eigenen hinstellen????
[/FRUSTMODE]
Ich bin auch ziemlicher Anfänger - ich programmiere Java erst seit Mai 2010.

Hast du keinen Debugger? Ich verwende den immer wenn ich ein Programm nicht verstehe.
 
@andi_ch
danke für deine Hilfe, und kom runter^^ Glaubst du, ich würde Java programmieren, wenn ich es nicht lernen möchte?🙂
ja ich verwende einen Debuger, und nein der Code ist nicht von mir, und ich verstehe ihn noch nicht richtig, was nicht heisst, dass ich ihn nicht verstehen möchte. habe ich irgend wo geschrieben, dass der Code mein eigener ist???

@Michael
Danke, das kommt der Sache schon näher.
 
Dann step mit dem Debugger durch - dann findest du doch sicher raus wo der Code rein muss.

Ich sags sehr direkt - Deine Art der Fragerei heisst IMHO übersetzt - gebt mir die Lösung dann lasse ich euch in Ruhe.
 

Zurück
Oben