Witam pisze program który w jakiś podstawowy sposób naprawia kod Java.
Jestem w momencie
- usuwać na żądanie słowo kluczowe public przed klas publicznych (nie dotyczy klas wewnętrznych)
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.BufferedReader;
class Start{
static BufferedReader bufferedReader;
public static void main( String a[] )
{
String source = readFile(a[0]);
int j = 2;
String s1 = "[no]public";
while( j < a.length )
{
try
{
File file = new File(a[1]);
if (!file.exists())
{
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(source.replaceAll("(?:package.*)","")); // Usuwanie pakietu w kazdym przypadku
if( s1.equals(a[j]) )
{
j++;
String temp = a[j];
System.out.println(temp);
source.replaceFirst("public class\\*[a-zA-Z_0-9]*", "class "+temp )); //[ \t\n\x0B\f\r]
}
bw.close();
}
catch (IOException e)
{
e.printStackTrace();
}
j++;
}
}
static String readFile(String fileName)
{
File file = new File(fileName);
char[] buffer = null;
try {
bufferedReader = new BufferedReader( new FileReader(file));
buffer = new char[(int)file.length()];
int i = 0;
int c = bufferedReader.read();
while (c != -1) {
buffer[i++] = (char)c;
c = bufferedReader.read();
}
}
catch (IOException e)
{
e.printStackTrace();
}
return new String(buffer);
}
}
Sposób uruchomienia programu będzie następujący:
java Start plik_wejsciowy.java plik_wynikowy.java [no]public ClassName
czyli ma zrobić nie publiczna klasę oraz zmienić jego nazwę na "ClassName"
Teraz powiem w czym mam problem i tutaj prosił bym o jakaś pomoc sugestie:
Linika o którą mi się rozchodzi:
source.replaceFirst("public class\[a-zA-Z_0-9]", "class "+temp ));
jak usunąć stara nazwę klasy (oczywiście jej nie znam)
całej liniki nie mogę usunąć bo klasy przecież mogą jeszcze mieć za nazwą: [implements cos] , [interface cos], [extends cos], i chyba [throws cos](tego nie jestem pewien) a tego tez nie wiem jak będzie w pliku wejściowym
próbowałem z tym żeby się zatrzymywał właśnie na tych początkach liter i/e/t ale coś mi nie wychodziło.
Wiecie jak to zrobić? Czy w ogóle da się usunąć nieznane słowo ze środka liniki.
Plik jaki testuje: (ale raczej nie jest potrzebny)
package zadanie1;
public class Porsche extends Automobile {
protected String color;
public String getColor() {
return color;
}
public void setColor(String newColor) {
color = newColor;
}
}
class Audi implements Jajko
{
public String getColor() {
return color;
}
}