-1

我正在尝试使用 Python 制作一个程序,该程序会在遇到某些字符(例如大括号)时自动缩进下一行字符串。

例如:

public class Example{

--indent--> public static void main (String[]args){

--indent--> System.out.println("Hello");
}
}

我似乎无法掌握我需要编写什么代码才能实现这一目标。

任何形式的帮助将不胜感激!

4

2 回答 2

1

老实说,您设置代码的确切方式取决于您是否正在对其进行其他操作以“漂亮地打印”它。某物的粗略轮廓可能如下所示

def pretty(s):
    start = "{"
    end = "}"
    level = 0
    skip_start = False

    for c in s:
        # raise or lower indent level
        if c == start:
            level += 1
        if c == end:
            level -= 1

        if level < 0:
            raise IndentationError("Error Indenting")

        if c == "\n":
            skip_start = True # I'm bad at naming just a flag to mark new lines

        if c.isspace() and skip_start:
            pass #skip whitspace at start of line
        else:
            if skip_start:
                print("\n", "  " * level, end="") #print indent level
                skip_start = False
            print(c, end = "") #print  character

pretty('''
public class Example{



public static void main (String[]args){
if (1==1){
    //do thing
//do other thing
             // weird messed up whitespace
}else{
System.out.println("Hello");
}
}
}
''')

会输出

 public class Example{
   public static void main (String[]args){
     if (1==1){
       //do thing
       //do other thing
       // weird messed up whitespace
     }else{
       System.out.println("Hello");
     }
   }
 }
于 2020-05-16T04:50:27.310 回答
1

这是一种快速而肮脏的方法。基本上我只是遍历输入字符串的行 ( cppcode) 并跟踪当前的缩进 ( tabdepth)。当我在输入行中遇到大括号时,我会向上或向下增加制表符深度,然后将tabdepth制表符的数量添加到输出行。

cppcode = '''
public class Example{

public static void main (String[]args){

System.out.println("Hello");
}
}
'''


tabdepth = 0

for line in cppcode.split("\n"):
    depth_changed = False
    indentedline = ''.join(['\t'*tabdepth, line])
    for c in line:
        if c == '{':
            tabdepth += 1

        elif c == '}':
            tabdepth -= 1
            depth_changed = True

    if depth_changed: 
        indentedline = ''.join(['\t'*tabdepth, line])

    print(indentedline)
于 2020-05-16T04:41:32.227 回答