Pomoc z programem do usuwania/naprawniania kodu java

Odpowiedz Nowy wątek
2015-01-18 20:28
0

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 wogole 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;  
    }
}

Pozostało 580 znaków

2015-01-18 21:55
0

Jeżeli już dostaniesz się do konkretnej linijki to rozdziel słowa (http://stackoverflow.com/ques[...]how-to-split-a-string-in-java), pętlą przeleć po każdym wyrazie i jeden wyraz po class podmień.

Pozostało 580 znaków

2015-01-18 22:20
0

Zdajesz sobie sprawę, z tego, że nazwa klasy może w pliku źródłowym występować wielokrotnie - nie tylko w wierszu

public class Foo

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0