2017-03-21 1 views
0

割り当てのために、Javaファイルを受け入れ、乱雑なコードを修正して新しいファイルに出力するJavaプログラムを作成しています。特定の文字の後にあるすべての行を別の文字にインデントします

括弧が1行につき1つしかないと仮定し、各括弧は行末に表示されます。 If/elseステートメントも大括弧を使います。

現在、開いている括弧の後のすべての行を次の閉じ括弧までインデントする方法を見つけるのが難しいです。次に括弧を閉じてから次の括弧までインデントを減らしてください。このアルゴリズムは、あなたが始める必要がある

public static void processJavaFile() { 
     } 
} 
+0

(私はあなたにそれが行われるかもしれない方法のアイデアを与えるために汚いこのクイックN」を書いた); ' –

+1

私はあなたがする必要があると思いますあなたが何をしたいのかを知るために、必要なもののサンプル、入力と出力を提供してください。 –

+0

あなたの問題が正しいインデントを計算しているか、行を正しくインデントしているのかどうかは不明です。あなたのコードを示し、私たちが知るように観察された行動を指定してください。あなたに有用な指針を与えるのは私たちの唯一のチャンスです。 –

答えて

1

更新されたコードビット:我々はまた、以下の方法を使用する必要があります。私はあなたが修正しなければならないいくつかの不具合を残しました。 (例えば、あなたの{ブラケット}は現在のところインデントされておらず、セミコロンごとに改行が追加されています)

インデントは「深さ」カウンタによって処理され、たす。

各反復をより詳細に制御するには、foreachの代わりにforループを使用することを検討してください。多分 `ライン= line.replaceAll(『^』、"「)

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(); 
} 
関連する問題