2015-09-30 3 views
2

Я пытаюсь прочитать информацию из txt-файла. Текстовый файл в следующем формате:Поиск целых чисел в txt-файле

1 I like programming. 2 "but I am new at it" 3 -so I need to go 
4 on web sites, 5 to get 6 help. 
7 I appreciate any help you could give me. 8 Thanks. 

Я хочу, чтобы отобразить его следующим образом, при добавлении «ЧАП», для главы, перед каждым номером.

Chap 1 I like programming. 
Chap 2 "but I am new at it" 
Chap 3 -so I need to go 
Chap 4 on web sites, 
Chap 5 to get 
Chap 6 help. 
Chap 7 I appreciate any help you could give me. 
Chap 8 Thanks. 

Это то, что я до сих пор:

public class ReadAFile { 

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

    // Get bible book names, chapters and verses 
    File fileIn = new File("t.txt"); 
    Scanner inputFile = new Scanner(fileIn);     

    while(inputFile.hasNext()) 
    { 
     // Read all lines from the file. 
     String line = inputFile.nextLine(); 
     System.out.println(line); 
     String[] tokens = line.split(" ");  
     for(int i = 0; i < tokens.length; i++) 
     { 
      if(tokens[i].matches("^-?\\d+$")) // I'mm using this to try to find the numbers in the txt file 
      { 
       for(int p = 0; p < tokens.length; p++) 
       { 
        System.out.println(tokens[p]);      
       }  
      } 
     }       
    }   
    inputFile.close(); 
} 
} 

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

+2

Добро пожаловать в StackOverflow. Я отредактировал ваш ответ, чтобы удалить преамбулу и заранее заблаговременно, поскольку они считаются ненужными для StackOverflow. Я также добавил тэг [tag: Java], чтобы помочь другим найти/классифицировать ваш вопрос. Если моя догадка о Java была неправильной, пожалуйста, внесите в нее соответствующие изменения. Большое спасибо. –

ответ

0

Вы пытались переключить println в цикле for на print, а затем вставить новую строку, когда печатается заголовок главы?

Вот часть вашего собственного кода, измененная.

if(tokens[i].matches("^-?\\d+$")) // I'mm using this to try to find the numbers in the txt file 
{ 
    for(int p = 0; p < tokens.length; p++) 
    { 
     System.out.print(tokens[p]+ " "); //print      
    }  
    System.out.println()//Empty line 
} 
0

Будут ли числа ВСЕГДА начинаться с 1? Если да, почему бы не использовать это в ваших интересах и просто изменить разделитель сканера на число и заменить его на счетчик? Что-то вроде этого:

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

    // Get bible book names, chapters and verses 
    File fileIn = new File("t.txt"); 
    Scanner inputFile = new Scanner(fileIn); 
    inputFile.useDelimiter("\\s*-?\\d+\\s*"); 

    for (int num = 1; inputFile.hasNext(); num++) 
    { 
     System.out.println("Chap " + num + " " + inputFile.next()); 
    } 

    inputFile.close(); 
} 

Выход:

Chap 1 I like programming. 
Chap 2 "but I am new at it" 
Chap 3 -so I need to go 
Chap 4 on web sites, 
Chap 5 to get 
Chap 6 help. 
Chap 7 I appreciate any help you could give me. 
Chap 8 Thanks. 

Если нет, дайте мне знать, и я буду работать на то, чтобы разобрать его и держать его :)

+0

Номера не всегда будут последовательными. Файл txt будет: 1 bla 2 bla 3 bla ... 2 bla 2 bla 3 bla 4 bla ... 3 bla 2 bla 3 bla ... это продолжается до следующей главы. – bstring

+0

Похоже, он тоже должен искать стихи внутри главы? Для этого потребуется какой-то дополнительный согласованный маркер для использования в главах по сравнению со стихами в качестве разделителя независимо от того, что. Вы можете использовать этот разделитель для вложенности циклов. Если все, что у вас есть, - это номера, которые не могут указывать между номерами главы и стихов, нет способа расщепления или разграничения их. Могут ли номера глав иметь двойной разрыв линии между ними? Затем вы можете использовать два сканера с «\\ n \\ n \\ s * -? \\ d + \\ s *" снаружи и "\\ s * -? \\ d + \\ s *" внутри и по-прежнему считать if он начинается с 1. – BrainFRZ