2017-03-21 1 views
0

과제를 위해 우리는 자바 파일을 받아 들인 지저분한 코드를 고치고 새로운 파일로 출력하는 자바 프로그램을 만들고 있습니다.특정 문자 뒤의 모든 줄을 다른 문자까지 들여 쓰기

한 줄에 괄호가 하나만 있다고 가정해야하며 각 줄은 줄 끝 부분에 있습니다. If/else 문도 대괄호를 사용합니다.

저는 현재 닫는 괄호 다음 괄호까지 모든 줄을 들여 쓰는 방법을 찾지 못하고 다음 닫는 괄호까지 괄호를 닫은 후에 들여 쓰기를 줄이는 방법을 찾는 데 현재 문제가 있습니다.

업데이트 코드 비트 :이 알고리즘은 당신이 시작해야

public static void processJavaFile() { 
     } 
} 
+0

어쩌면'라인 = line.replaceAll은 ("^", "");' –

+1

나는 당신이 필요하다고 생각을 필요한 것을 샘플로 제공하고, 입력과 출력을 통해 원하는 것을 알 수 있습니다. –

+0

올바른 들여 쓰기를 계산하는 데 문제가 있는지, 줄을 올바르게 들여 쓰기했는지 여부는 명확하지 않습니다. 우리가 알 수 있도록 귀하의 코드를 보여 주시고 관찰 된 행동을 명기하십시오. 유용한 지침을 제공 할 수있는 유일한 기회입니다. –

답변

1

을 우리는 또한 아래의 방법을 사용해야합니다. 나는 당신이 고쳐야 할 몇 가지 결함들을 남겼다. (예 : 현재 괄호로 들여 쓰기를하지 않고 모든 세미콜론에 대해 추가 줄 바꿈을 추가합니다)

들여 쓰기는 '깊이'카운터에 의해 처리됩니다. 추가 할.

각 반복을보다 잘 제어하려면 foreach 대신 조건부 for 루프를 사용하는 것이 좋습니다. (내가 쓴이 더러운 '빠른 n은 당신에게 그것을 할 수있는 방법에 대한 아이디어를 제공하기 위해)

public String parse(String input) { 
    StringBuilder output = new StringBuilder(); 
    int depth = 0; 
    boolean isNewLine = false; 
    boolean wasSpaced = false; 
    boolean isQuotes = false; 
    String tab = "  "; 
    for (char c : input.toCharArray()) { 
     switch (c) { 
     case '{': 
      output.append(c + "\n"); 
      depth++; 
      isNewLine = true; 
      break; 
     case '}': 
      output.append("\n" + c); 
      depth--; 
      isNewLine = true; 
      break; 
     case '\n': 
      isNewLine = true; 
      break; 
     case ';': 
      output.append(c); 
      isNewLine = true; 
      break; 
     case '\'': 
     case '"': 
      if (!isQuotes) { 
       isQuotes = true; 
      } else { 
       isQuotes = false; 
      } 
      output.append(c); 
      break; 
     default: 
      if (c == ' ') { 
       if (!isQuotes) { 
        if (!wasSpaced) { 
         wasSpaced = true; 
         output.append(c); 
        } 
       } else { 
        output.append(c); 
       } 
      } else { 
       wasSpaced = false; 
       output.append(c); 
      } 
      break; 
     } 
     if (isNewLine) { 
      output.append('\n'); 
      for (int i = 0; i < depth; i++) { 
       output.append(tab); 
      } 
      isNewLine = false; 
     } 
    } 
    return output.toString(); 
}