2013-10-26 5 views
0

Я даже не уверен, правильно ли я спросил, в основном, что я хочу сделать: 1. введите java-файл 2. попросите его подсчитать и набрать открытые скобки «{», и отсчет и число закрытых скобок "}", поэтому для программ было бы легче сопоставить скобки, и вы могли бы видеть, какие открытые скобки соответствуют закрытым скобкам, а для закрытых скобок в конце без открытой скобки дают им 0. Например если вход был чем-то вроде blah {blah {blah {blah} blah} blah}}} это было бы blah {1 blah {2 blah {3 blah} 3 blah} 2 blah} 1} 0} 0 So далеко все, что делает моя программа, - это проверка входного файла в консольной строке, если его нет, тогда он запрашивает у пользователя имя файла. То, как оно сейчас, все, что он делает, - это число «{» с 0, и теперь я застрял. Что я могу делать с этого момента?Подсчет и нумерация внутри файла?

import java.util.Scanner; 
import java.io.IOException; 
import java.io.FileReader; 
import java.io.File; 
import java.io.BufferedReader; 


public class BracketCount 
{ 

    public static void main(String args[ ]) throws IOException 
    { 

     File fileName;                 
     if (0 < args.length)                  
     { 
     { 
      try 
      { 
       File inputFile = new File(args[0]);              
       Scanner in=new Scanner(inputFile);          
      } 
      catch(IOException exc) 
      { 
       System.out.println("File not found"); 
      } 
     } 
    } 
    else 
    { 
     try 
     { 
      File inputFile2; 
      Scanner console=new Scanner(System.in); 
      System.out.println("No file in command line, please enter the file: "); 
      String fileName2=console.next(); 
      inputFile2=new File(fileName2); 

     } 
     catch(IOException exc) 
     { 
      System.out.println("File not found"); 
     } 
    } 
} 

} 
+1

Прежде всего .. Хороший вопрос. Но программа не имеет для меня никакого смысла. Цикл while ничего не делает. Я думаю, вам нужно сначала исправить синтаксис –

+2

Эти скобки ....... – Tdorno

+2

В коде, который вы предоставили, имеется несколько ошибок. Вы используете IDE? – Tdorno

ответ

0

Я хотел бы сделать что-то вроде этого

// boolean to detect fist closing bracket 
boolean firstClose = false; 

int count = 0; 
StringBuilder sb = new StringBuilder(); 
while(input.hasNextLine()) { 
    String line = input.nextLine();   // get one line 
    String newLine = "";      // start newLine with 0 chars 
    for (int i = 0; i < line.length(); i++) { // loop through chars in line 
     char ch = line.charAt(i); 
     if (ch == '{') {      // if current char = '{' 
      newLine += ch;     // add '{' to newLine 
      count++;       // increase count 
      newLine += count; 

      firstClose = true; 

     } else if (ch == '}') {  
      if (firstClose) { 
       newLine += ch; 
       newLine += count; 
      } else { 
       newLine += ch;     
       count--;       
       newLine += count; 
       firstClose = false; 
      }    
     } else { 
      newLine += ch;     // else add char to newLine 
     } 
    } 
    sb.append(newLine);      // append newline to StringBuilder 
    sb.append("\n");       // append a next line char 
} 

PrintWriter writer = new PrintWriter(file); 
writer.print(sb.toString());     // print the entire StringBuiler to file. 
               // This this completely overwrite the 
               // original file 
+0

Могу ли я просто использовать System.out.println (sb) для печати на консоль вместо того, чтобы перезаписывать прочитанный файл? – user2921899

+0

Да, я не знаю почему. –

+0

Это очень близко! Я попытался немного изменить его и не могу понять, но это неправильно соответствует номерам, это должно быть {1 {2 {3,} 3} 2} 1, но это {1 {2 { 3,} 2} 1} 0 – user2921899

0

это не было бы лучше, чтобы проверить файл, один символ за один раз, и всякий раз, когда вы видите «{», вставить ваш счетчик & затем увеличить его, но всякий раз, когда вы видите «}», уменьшите свой счетчик, а затем вставьте его? В противном случае метки не будут совпадать. (И даже делая это, вы получите в неприятность с фигурными скобками внутри струны и/или комментариев.)

1

Каждый раз, когда вы делаете это:

StringBuilder(text); 

count переменные устанавливаются в 0. Move эта строка кода и объявить count на уровне класса:

int count = 0; 
Смежные вопросы