habe ein Problem. Ich habe eine vordefinierte Textdatei, wo Standarttext sowie §xxx drin enthalten ist. Nun möchte ich aus Java heraus diese Datei X.txt öffnen, nach §xxx suchen und einen anderen Text hinein schreiben!
public boolean Load(String FileName)
{
String buf = null ;
int Zeile = 1 ;
boolean back = false ;
// ##########
String writeBack = null ;
try
{
BufferedReader input = new BufferedReader(
new InputStreamReader(
new FileInputStream(FileName)), 1000) ;
// ########################
FileOutputStream Fileoutput = new FileOutputStream(FileName) ;
DataOutput outFile = new DataOutputStream(Fileoutput ) ;
// ########################
while (input.ready() )
{
buf = input.readLine() ;
// ##########################
writeBack = buf.replaceAll("§xxxx", "XXXXXXX") ;
// oder ersetzen mit
// index = buf.indexOf("§") usw. siehe Java Dokumentation für String
Zeile++ ;
outFile.writeBytes(writeBack +"\n") ; // weiss jetzt nicht, ob "\n" nötig ist
}
input.close() ;
back = true ;
}
catch (Exception e)
{
System.out.println(e);
System.out.println("----------------------Exception laden/schreiben!");
System.exit(1);
}
return back ;
}
String replaceAll(String, String) ist allerdings erst ab Java 1.4 verfügbar und benutzt Reguläre Ausdrücke. Falls Du eine ältere Java Version hast, dann must Du erst das Vorkommen Deines Strings suchen (index = buf.indexOf("§xxxx")) und dann entsprechend ersetzten indem Du dir erst den Teil vor "§xxxx" geben lässt buf.subString(0, index), dann ersetzt und dann den Teil nach "$xxxx" anfügst. Geht sicherlich auch noch eleganter, aber das fällt mir jetzt nicht ein.
Oh man. Das ist gut. Vielen Dank. Hab leider nicht die 1.4 Version.
Deinen Text, wie man es mit älteren Versionen machen könnte, habe ich nicht ganz verstanden. Könntest Du mir das code mäßig zeigen???? Währe echt klasse!!!!
Oh man. Das ist gut. Vielen Dank. Hab leider nicht die 1.4 Version.
Deinen Text, wie man es mit älteren Versionen machen könnte, habe ich nicht ganz verstanden. Könntest Du mir das code mäßig zeigen???? Währe echt klasse!!!!
public class Test
{
public static void main(String args[])
{
String s1 = "beforeFINDafter" ;
int index = s1.indexOf("FIND") ;
String s2 = "error - String not found" ;
if (index > -1) // found !
{
// Teil vorher
s2 = s1.substring(0, index) ; // Zählung beginnt bei Index 0
// neuen Teil
s2 = s2.concat(" new ") ;
// Teil dahinter
s2 = s2.concat( s1.substring(index +4) ) ; // 4 = Länge zu ersetzenden Wortteiles
System.out.println("#" +s2 +"#") ;
}
}
}
Hier wird aber nur das 1. Vorkommen im String ersetzt, sollte es mehrere solcher Wörter geben mußt Du noch eine while Schleife drum basteln....
Eine vollkommen andere Geschichte aber wahrscheinlich weitaus effektiver ist die Arbeit mit Streams. D.h. normalerweise hast Du einen Eingabe und eine Ausgabestrom die Du nur entsprechend entleeren/füllen mußt. Naja aber so sollte es hoffentlich auch gehen. Vielleicht posted jemand noch eine andere Variante.....