Nasıl bu metni biçimlendiririm? java

oy
46

Yani sorun şu. Doğru biçimlendirme içine bir metin dosyası açın. Sorunun noktası O metin dosyasında kod içeren bir dosya, bir metin dosyası, okumak zorunda olmasıdır. Bu kod korkunç biçimlendirme vardır. Biçimlendirme sorunu böyle bir küme ayracı varken olmasıdır {, bir sonraki satır sağa değil 4 boşluktur, sadece hepsi çok sola bulunuyor. Bunun gibi:

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

bu olmalıdır Ne zaman:

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

Ve ancak kuralı sadece o kadar böyle bir küme ayracı var her zaman {sonraki satır sağa 4 boşluk olduğundan emin olmak için yapmaktır 2. arasında bir fark yoktur. Ve tersi de doğrudur. Yani her zaman böyle bir küme ayracı} var, bir sonraki satır sola 4 alanlarda olmalıdır. Sizin bu anlamanızı umuyorum.

Bu benim sorundur. Birden alanlarda ve çizgilerle metin parçasıdır tek bir boşluk her seferinde tek bir çizgi haline bir program yapmayı öğrendiler. Çok zor değildi.

Bunun için olsa da, aynı hat üzerinde her şeyi tutmak gerekir. 30 satırları varsa Yani, yapmak yeni programı da 30 satır. Ben çok benzer boşluğu tutmak gerekiyor ama basit fark bütün ayracı şeydir. Yani temelde, ben sadece bir ayraç ister sağa 4 boşluk sonra çizgi yapmak zorunda ve bir eğer sola 4 mekanlara yani sonra aynı şeyi }kaşlı ayraç.

Peki nasıl tam olarak bu yapacağım? Sadece başka şeyler karışıklık olmadan düzeltmek bilmiyorum. Yapmam gereken böyle basit bir şey; Sadece parantezler sağa ya da sola 4 boşluk aşağıdaki satırları yapmak, ama sadece bunu gerçekleştirmek için kullanmak ne sözdizimi hiçbir fikrim yok. Teşekkürler!

DÜZENLEME: Bu sadece daha kolay hale getirmiş olabilir. Yani temel olarak tüm satırlar sağ küme ayracı, bir sol kaşlı ayraç veya noktalı virgülle sonlandırmanızı. Ne olursa olsun. Böylece her zaman yukarı olanlar Pops biri, bir çizginin sonudur. Bunu kolaylaştırır nasıl Yani belki eğer, o zaman sadece sen bilmesini istiyorum.

Oluştur 29/02/2016 saat 23:04
kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
0

Orada sizin için otomatik olarak yapacaktır programlardır, yani tekerleği yeniden icat etmek gerekmez. Örneğin, Eclipse yazın: ctrl-a(tümünü seç) ctrl-i(otomatik girinti).

Cevap 29/02/2016 saat 23:43
kaynak kullanıcı

oy
0

Burada başlayabilir bir yalancı kod var:

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

Gerçi kaçan parantez ve diğer komplikasyonlar ile uğraşmak gerekebilir

Cevap 29/02/2016 saat 23:54
kaynak kullanıcı

oy
0

Normal ifadeler kullanarak oldukça kolay bir şekilde yapabilirsiniz. Siz farkına ve bir programcı olmak için planlama yoksa, o zaman kesinlikle öğrenirler. Gelecekte zamanın Eğer sürü kurtaracak.

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

}
Cevap 01/03/2016 saat 02:01
kaynak kullanıcı

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