Πώς μπορώ να διαμορφώσετε αυτό το κείμενο; Ιάβα

ψήφοι
46

Έτσι, εδώ είναι το πρόβλημα. Μετατρέψτε ένα αρχείο κειμένου στη σωστή μορφοποίηση. Το σημείο του προβλήματος είναι ότι έχω να διαβάσει ένα αρχείο, ένα αρχείο κειμένου, το οποίο περιέχει κώδικα σε αυτό το αρχείο κειμένου. Ο κώδικας του ότι έχει τρομερή μορφοποίηση. Το θέμα μορφοποίησης είναι ότι όταν υπάρχει μια σγουρά στήριγμα όπως αυτό {, η επόμενη γραμμή δεν είναι 4 θέσεις προς τα δεξιά, είναι ακριβώς όλα για την ίδια την αριστερά. Σαν αυτό:

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

Πότε θα πρέπει να είναι το εξής:

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

Και υπάρχουν άλλες διαφορές μεταξύ των 2. Ο μόνος κανόνας είναι να κάνει απλά έτσι κάθε φορά που υπάρχει μια σγουρά στήριγμα όπως αυτό {, για να βεβαιωθείτε ότι η επόμενη γραμμή είναι 4 θέσεις προς τα δεξιά. Και αντίστροφα. Έτσι, κάθε φορά που υπάρχει μια σγουρά στήριγμα όπως αυτό}, η επόμενη γραμμή θα πρέπει να είναι 4 θέσεις προς τα αριστερά. Ελπίζω εσείς να κατανοήσουν αυτό.

Αυτό είναι το θέμα μου. Έμαθα πώς να κάνει ένα πρόγραμμα, όπου ένα κομμάτι του κειμένου με πολλαπλές θέσεις και τις γραμμές έχει μετατραπεί σε μια ενιαία γραμμή με ένα ενιαίο χώρο κάθε φορά. Δεν ήταν πάρα πολύ σκληρά.

Γι 'αυτό, όμως, πρέπει να κρατήσει τα πάντα στην ίδια γραμμή. Έτσι, αν υπάρχουν 30 γραμμές, το νέο πρόγραμμα που κάνω είναι επίσης 30 γραμμές. Θα πρέπει να κρατήσει πολύ παρόμοια απόσταση, αλλά η απλή διαφορά είναι το όλο θέμα στήριγμα. Έτσι, βασικά, απλά πρέπει να κάνει τη γραμμή μετά από ένα στήριγμα είτε 4 θέσεις προς τα δεξιά, και στη συνέχεια να κάνουν το ίδιο, ώστε να είναι προς τα αριστερά 4 θέσεις αν είναι μια }σγουρά στήριγμα.

Λοιπόν, πώς μπορώ να το κάνω αυτό ακριβώς; Δεν ξέρω πώς να καθορίσει ακριβώς αυτό, χωρίς να χαλούν άλλα πράγματα. Είναι τόσο απλό πράγμα έχω να κάνω? απλά κάνουν τις γραμμές, ακολουθώντας τις τιράντες 4 θέσεις προς τα δεξιά ή προς τα αριστερά, αλλά εγώ απλά δεν έχουν ιδέα τι σύνταξη να χρησιμοποιήσετε για να επιτευχθεί αυτό. Ευχαριστώ!

EDIT: Αυτό θα μπορούσε να έχει μόλις γίνει ευκολότερη. Έτσι, βασικά, όλες οι γραμμές είτε τελειώνει με ένα δικαίωμα σγουρά στήριγμα, ένα αριστερό σγουρά στήριγμα, ή ένα ημι-κόλον. Οτι και αν γινει. Έτσι, κάθε φορά που ένα από αυτά τα σκάει επάνω, είναι το τέλος μιας γραμμής. Έτσι ίσως αν ξέρεις πώς να το καθιστά ευκολότερο, τότε είμαι απλά για να σας ενημερώσουμε.

Δημοσιεύθηκε 29/02/2016 στις 23:04
χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
0

Υπάρχουν προγράμματα που θα το κάνει αυτό για σας αυτόματα, οπότε δεν χρειάζεται να ανακαλύψουμε τον τροχό. Για παράδειγμα, το Eclipse, τύπου: ctrl-a(επιλογή όλων) ctrl-i(auto-παύλα).

Απαντήθηκε 29/02/2016 στις 23:43
πηγή χρήστη

ψήφοι
0

Εδώ είναι ένα ψευδοκώδικα μπορείτε να ξεκινήσετε με:

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

ίσως χρειαστεί να ασχοληθεί με δραπέτευσε τιράντες και άλλες επιπλοκές αν

Απαντήθηκε 29/02/2016 στις 23:54
πηγή χρήστη

ψήφοι
0

Μπορείτε να το κάνετε αυτό πολύ εύκολα χρησιμοποιώντας κανονικές εκφράσεις. Εάν δεν το γνωρίζουν και σχεδιάζει να είναι ένας προγραμματιστής, τότε σίγουρα θα μάθουν. Θα σώσει για σας πολύ χρόνο στο μέλλον.

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();
    }

}
Απαντήθηκε 01/03/2016 στις 02:01
πηγή χρήστη

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