Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen?

Diskutiere Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? im Allgemeine Java-Themen Bereich.
Bitte aktiviere JavaScript!
Drachenbauer

Drachenbauer

Ich habe folgense Anweisung in meinem code:
Java:
name.replace('concrete', 'terracotta');
"name" ist ein string, der das Wort "concrete" enthält, das durch das Wort "terracotta" ersetzt werden soll.
Aber "concrete" wird bei mir rot unterstrichen und es sagt etwas von "invalid character constant".

Hier ist die ganze Java-classe:
Java:
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.channels.FileChannel;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;

public class JsonFileCreateHelper
{
    static File dir1 = new File("D:\\Mods\\1_15_1\\FlatTilesMod\\src\\main\\resources\\assets\\flattilesmod\\blockstates");
    static File dir2 = new File("D:\\Mods\\1_15_1\\FlatTilesMod\\src\\main\\resources\\assets\\flattilesmod\\models\\block");
    static File dir3 = new File("D:\\Mods\\1_15_1\\FlatTilesMod\\src\\main\\resources\\assets\\flattilesmod\\models\\item");
    static File dir4 = new File("D:\\Mods\\1_15_1\\FlatTilesMod\\src\\main\\resources\\data\\flattilesmod\\recipes");
     
    static ArrayList<File> list1 = new ArrayList<File>(Arrays.asList(dir1.listFiles()));
    static ArrayList<File> list2 = new ArrayList<File>(Arrays.asList(dir2.listFiles()));
    static ArrayList<File> list3 = new ArrayList<File>(Arrays.asList(dir3.listFiles()));
    static ArrayList<File> list4 = new ArrayList<File>(Arrays.asList(dir4.listFiles()));
 
    public static void main(String[] args) throws IOException
    {
        int i;
     
        /*for (i = 0; i < list1.size(); i++)
        {
            File dir = list1.get(i);
            createFile(dir1, dir.getName(), "glazed_");
        }
     
        for (i = 0; i < list2.size(); i++)
        {
            File dir = list2.get(i);
            createFile(dir2, dir.getName(), "glazed_");
        }
     
        for (i = 0; i < list3.size(); i++)
        {
            File dir = list3.get(i);
            createFile(dir3, dir.getName(), "glazed_");
        }*/
     
        for (i = 0; i < list4.size(); i++)
        {
            File dir = list4.get(i);
            createFile(dir4, dir.getName(), "glazed_");
        }
    }
 
    public static void createFile(File dir, String name, String subString)
    {
        if( name.contains("concrete") && name.endsWith(".json"))
        {
            try
            {
                //writeFile(dir, rename(name, subString), rename(readFile(name), subString));
                writeFile(dir, name.replace('concrete', 'terracotta'), readFile(name).replace('concrete', 'terracotta'), subString);
                //copy (dir, new File (dir1, rename(dir.getName(), subString)));
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }
 
  /*@SuppressWarnings("unused")
    private static void copy(File source, File destination) throws IOException
    {
        long length = source.length();
        @SuppressWarnings("resource")
        FileChannel input = new FileInputStream(source).getChannel();
     
        try
        {
            @SuppressWarnings("resource")
            FileChannel output = new FileOutputStream(destination).getChannel();
         
            try
            {
                for (long position = 0; position < length; )
                {
                    position += input.transferTo(position, length-position, output);
                }
            }
            finally
            {
                output.close();
            }
        }
        finally
        {
            input.close();
        }
    }*/
 
    @SuppressWarnings("resource")
    public static String readFile(String filename) throws IOException
    {
        File file = new File(filename);
        int len = (int) file.length();
        byte[] bytes = new byte[len];
        FileInputStream fis = null;
     
        try
        {
            fis = new FileInputStream(file);
            assert len == fis.read(bytes);
        }
        catch (IOException e)
        {
            close(fis);
            throw e;
        }
        return new String(bytes, "UTF-8");
    }
 
    public static String rename (String source, String part)
    {
        String new_content = new String();
        int i;
        for (i = 0; i < source.length(); i++)
        {
            new_content += source.charAt(i);
         
            if (source.charAt(i) == '_' && source.charAt(i + 1) == 't'&& source.charAt(i + 2) == 'e' && source.charAt(i + 1) == 'r')
            {
                new_content += part;
            }
        }
        return new_content;
    }
 
    public static void writeFile(File file, String filename, String text) throws IOException
    {
        Path path = file.toPath();
     
        OutputStream os = null;
        try
        {
            os = Files.newOutputStream(path, StandardOpenOption.CREATE_NEW);
            os.write(text.getBytes("UTF-8"));
        }
        catch (IOException e)
        {
            close(os);
            throw e;
        }
    }
 
    public static void close(Closeable closeable)
    {
        try
        {
            closeable.close();
        }
        catch (IOException ignored)
        {
         
        }
    }
}
Ich möchte damit Dateien zu einem anderen Projekt hinzufügen, da das per Hand ziemlich langsam und mühsam wäre.
Dazu möchte ich verschiedene Teile von dem Code auskommentieren oder reaktivieren, um Dateien mit verschiedenen modifizierungs-optionen erstellen zu können.

Der fehler ist in dieser Zeile:
Java:
 writeFile(dir, name.replace('concrete', 'terracotta'), readFile(name).replace('concrete', 'terracotta'), subString);
aber komischer weise nur im ersten Vorkommen von "replace".

Edit:
Ich glaube, ich habe die Lösung:
Alle Wörter in beiden vorkommen dieser Methode mussten in " " und nicht in ' '.
Ich dachte, sie müssten in die zweite variante, da in der Beschreibung der Methode "CharSequence" steht und nicht "String"

Mich wundert aber trotzdem, warum nicht alle 4 Wörter gleichzeitig rot unterstrichen waren, spndern erst nach und nach beim korrigieren...
Das sah nämlich erst aus, als op nur mit dem ersten davon etwas nicht stimmt, die anderen aber ok sind.
 
Zuletzt bearbeitet:
Drachenbauer

Drachenbauer

in der Beschreibung der Methode steht "CharSequence" und nicht "String".
Deshalb dachte ich, die anderen Zeichen wärren hier die richtigen.

Und wieso hat es erstmal nur einen der 4 Inhalte rot unterstrichen?
Das sah aus, als ob nur mit diesem ersten Wort "concrete" in der Zeile was nicht stimmte und die anderen 3 entsprechenden ok wären.
 
mihe7

mihe7

in der Beschreibung der Methode steht "CharSequence" und nicht "String"
Dann schau mal in der Beschreibung, was unter "All Known Implementing Classes:" steht.

Und wieso hat es erstmal nur einen der 4 Inhalte rot unterstrichen?
Naja, das liegt zunächst einmal an dem von Dir verwendeten Editor. Es ist aber auch völlig richtig so, denn jeden Unsinn rot zu unterkringeln würde zu Lasten der Performance des Editors gehen und bringt im Endeffekt nichts.
 
A

abc66

Schaue was Deine IDE sagt, die replace-Methoden sind überladen

12984

Java:
	public static String r(String s, String t, String r) {
		return s.replace(t, r);
	}

	public static void main(String[] args) {
		System.out.println(r("hallo", "l", "r"));
	}
 
Thema: 

Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen?

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben