Jak mogę sformatować ten tekst? Jawa

głosy
46

Więc tu jest problem. Skręć plik tekstowy do poprawnego formatowania. Punktem problemem jest to, że mam do odczytu pliku, plik tekstowy, który zawiera kod w pliku tekstowym. Kod że ma straszną formatowanie. Kwestia jest taka, że podczas formatowania jest nawias klamrowy tak {, następna linia jest nie 4 obowiązuje prawo, to jest po prostu wszystko bardzo w lewo. Lubię to:

while (blah blah blah) { 
sysout(blahblahblah);

Kiedy powinno być tak:

while (blah blah blah) { 
    sysout(blahblahblah); 

I nie ma żadnych innych różnic między 2. Jedyną zasadą jest po prostu sprawiają, że tak za każdym razem jest nawias klamrowy {tak, aby upewnić się, że kolejny wiersz jest 4 miejsca po prawej stronie. I wzajemnie. Więc za każdym razem istnieje nawias klamrowy tak}, następna linia powinna być 4 miejsca w lewo. Mam nadzieję, że wy to zrozumieć.

To jest mój problem. Dowiedziałem się, jak zrobić program, w którym kawałek tekstu z wielu miejsc i linii zamienia się w jednej linii z jednego miejsca za każdym razem. nie było zbyt trudne.

W tym celu, choć muszę zachować wszystko na tej samej linii. Więc jeśli istnieje 30 linii, nowy program robię jest także 30 linii. Muszę zachować odstępy bardzo podobny, ale różnica jest prosta klamra cała sprawa. Więc w zasadzie, po prostu trzeba zrobić linię po obu klamra 4 spacjami z prawej strony, a następnie zrobić to samo tak to jest na lewo 4 spacji, czy jest to }nawias klamrowy.

Więc jak mam to zrobić dokładnie? Nie wiem jak to naprawić, nie brudząc się inne rzeczy. To takie proste rzeczy mam do zrobienia; po prostu zrobić linie następujące obejmach 4 miejsca w prawo lub w lewo, ale po prostu nie mają pojęcia, co składnia do wykorzystania do osiągnięcia tego celu. Dzięki!

EDIT: Może to właśnie stało się łatwiejsze. Tak więc, w zasadzie, wszystkie linie albo koniec z prawej nawias klamrowy, lewy nawias klamrowy lub średnikiem. Nieważne co. Więc za każdym razem, gdy jeden z nich wyskakuje, że jest to koniec linii. Więc może jeśli wiesz, jak to sprawia, że ​​łatwiej wtedy ja tylko z powiadomieniem.

Utwórz 29/02/2016 o 23:04
użytkownik
W innych językach...                            


3 odpowiedzi

głosy
0

Istnieją programy, które zrobi to za ciebie automatycznie, więc nie trzeba wyważać otwartych drzwi. Na przykład, w Eclipse, typu: ctrl-a(zaznacz wszystko) ctrl-i(automatyczne wcięcia).

Odpowiedział 29/02/2016 o 23:43
źródło użytkownik

głosy
0

Oto pseudokod można zacząć:

int indentLevel = 0;
while(currentchar = nextchar != null){
    printCurrentChar
    if(currentchar is '{'){
        indentLevel++;
    }else if(currentchar is '}'){
        indentLevel--;
    }else if(currentchar is '\n'){
        print indentLevel * 4 spaces
    }
}

Może trzeba radzić sobie z zbiegłych szelki i innych powikłań, chociaż

Odpowiedział 29/02/2016 o 23:54
źródło użytkownik

głosy
0

Można to zrobić bardzo łatwo za pomocą wyrażeń regularnych. Jeśli nie wiesz, to i planuje być programistą, to na pewno się go nauczyć. Będzie to dla was uratować wiele czasu w przyszłości.

public class TextIndentator
{

    public static void main(String[] args) throws IOException
    {
        File uglyText = new File("ugly.txt");
        System.out.println((uglyText.exists() && !uglyText.isDirectory()) ? getNiceText(uglyText) : "FILE \"ugly.txt\" at " + System.getProperty("user.dir") + " do not exists");
    }

    static String getNiceText(File uglyText) throws IOException
    {
        // Opening file
        FileInputStream inputStream = new FileInputStream(uglyText);
        InputStreamReader isr = new InputStreamReader(inputStream);
        BufferedReader reader = new BufferedReader(isr);
        StringBuilder builder = new StringBuilder();
        StringBuffer buffer = new StringBuffer();

        // Algorithm starts here
        String line;
        boolean checkNext = false;
        while ((line  = reader.readLine()) != null)
        {
            if(checkNext)
            {
                // If previous line finished with '{' (And optionally with some whitespaces after it) then, replace any amount (including zero) of whitespaces with 4 witespaces
                builder.append(line.replaceFirst("\\s*", "    "));
            }
            else
            {
                builder.append(line);
            }
            // Check if line line finishes with { (And optionally with some whitespaces after it)
            if(line.matches(".*\\{\\s*")) checkNext = true;
            else checkNext = false;

            //Append line separator at the end of line
            builder.append(System.getProperty("line.separator"));
        }
        return builder.toString();
    }

}
Odpowiedział 01/03/2016 o 02:01
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more