2016-03-01 4 views
1

Итак, вот в чем проблема. Поверните текстовый файл в правильное форматирование. Дело в том, что я должен прочитать файл, текстовый файл, содержащий код в этом текстовом файле. Код в этом имеет ужасное форматирование. Проблема форматирования заключается в том, что когда есть фигурная фигурная скобка, такая как {, следующая строка не имеет 4 пробела справа, это всего лишь все слева. Как это:Как отформатировать этот текст? java

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

Когда это должно быть так:

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

И нет никаких других различий между 2. Единственным правилом является просто сделать так, каждый раз, когда есть фигурная скобка, как это {, чтобы следующая строка имела 4 пробела справа. И наоборот. Поэтому каждый раз, когда есть фигурная скобка, подобная этому}, следующая строка должна быть 4 пробела слева. Надеюсь, вы, ребята, это понимаете.

Это моя проблема. Я узнал, как создать программу, где фрагмент текста с несколькими пробелами и строками каждый раз превращается в одну строку с одним пространством. Не было слишком сложно.

Для этого, однако, я должен держать все на одной линии. Итак, если есть 30 строк, новая программа, которую я создаю, также составляет 30 строк. Мне нужно придерживаться очень близкого расстояния, но простая разница - это целая фигура. Так что в основном, мне просто нужно сделать линию после скобки либо в 4 пробелах справа, а затем сделать то же самое, чтобы она осталась на 4-х местах, если это фигурная скобка }.

Итак, как мне это сделать? Я не знаю, как просто исправить это, не испортив другие вещи. Это такая простая вещь, которую я должен сделать; просто сделайте строки, следующие за фигурными скобками, пробелами вправо или влево, но я просто не знаю, какой синтаксис использовать для достижения этого. Благодаря!

РЕДАКТИРОВАТЬ: Возможно, это просто упростило ситуацию. Таким образом, в основном, все линии либо заканчиваются правой фигурной скобкой, левой фигурной скобкой, либо точкой с запятой. Не важно что. Поэтому каждый раз, когда один из этих всплывающих окон, это конец строки. Так что, может быть, если вы знаете, как это становится проще, тогда я просто дам вам знать.

+0

Я честно не знаю, куда идти. У меня нет лучшего словарного кода. Я не знаю, как редактировать определенные строки, не испортив других. Мне не нужна полная программа, просто совет, будь то ее псевдокод или что-то еще. Или какой цикл или если заявление я должен использовать. Я здесь не для того, чтобы заставить кого-то сделать свою домашнюю работу для меня, у меня просто нет ИДЕИ, с чего начать, хотя я точно знаю, каким должен быть результат. Поэтому я ничего не пробовал, думал только о том, что я могу сделать, и я долго не думал об этом. –

ответ

0

Существуют программы, которые сделают это для вас автоматически, поэтому вам не нужно изобретать велосипед. Например, в Eclipse введите: ctrl-a (выберите все) ctrl-i (авто-отступ).

+0

Это для школьного задания. Мой учитель вводит текстовый файл, содержащий большой фрагмент кода.Мой вывод должен содержать модифицированную версию с правильным интервалом. –

+0

А, так вы просите нас сделать домашнее задание для вас. –

+0

Я часами думал о том, как это сделать. Я ничего не придумал. Я просто хочу некоторых указателей. У меня мало лексики, и я не могу этого сделать. Нет машины, которая могла бы помочь мне в этом. Я никогда не просил кого-то написать это. Но как просто манипулировать текстовым файлом, так что после фигурных скобок следующая строка состоит из четырех пробелов справа или слева. У меня нет много словарного запаса, и это может быть то, что убивает меня. Но зачем оставлять кого-то в пыли, потому что они ничего не могут сделать. Я уже заявил, что это не заговор, чтобы заставить кого-то сделать мой hw для меня. –

0

Вот псевдокод вы можете начать с:

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

вам, возможно, придется иметь дело с сбежавших скобками и других осложнений, хотя

0

Вы можете сделать это довольно легко с помощью регулярных выражений. Если вы этого не знаете и планируете быть программистом, то обязательно научитесь этому. Это сэкономит вам много времени в будущем.

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

} 
Смежные вопросы