2014-02-06 2 views
0

Я уверен, что это имеет какое-то отношение к разделителям, и я относительно новичок в Java и не могу найти ответа. Я должен прочитать из файла под названием Simulation.Configuration, который имеет эти данные в нем:Проблемы с чтением данных из файла - java

dimensionX: 100 
    dimensionY: 100 
    numberOfMobileObjects: 5 
    durationOfSimulationTime: 10 
    WarningGeotask: 1, 3 
    WarningGeotask: 2, 3 
    CounterGeotask: 1, 3 
    PopuplationMonitoringGeotask: 2, 3, 3 

У меня есть сканер для чтения через, чтобы найти данные и делать определенные вещи с ними. Я легко могу пройти мимо меток (размерX, размерностьY и т. Д.), Но, похоже, не может получить цифры. Я пробовал много способов, используя разделители, чтобы достигнуть этих чисел, но не похоже, чтобы добраться до them.The самой последней, которую я пробовал использует

scanner.useDelimiter("[ ,:]"); 

пробиться к данным. Когда я это делаю, он дает мне InputMismatchException. Вот как я читаю файл:

Scanner scanConfig = new Scanner(new File("Simulation.Configuration")); 

    scanConfig.useDelimiter("[ ,:]"); 

    int dimensionX = 0; 
    int dimensionY = 0; 
    int numberOfMobileObjects = 0; 


    while(scanConfig.hasNextLine()){ 

     String nextLabel = scanConfig.next(); 
     if(nextLabel.equals("dimensionX")){ 

      dimensionX = scanConfig.nextInt(); 
     } 
     if(nextLabel.equals("dimensionY")){ 

      dimensionY = scanConfig.nextInt(); 
     } 
     if(nextLabel.equals("numberOfMobileObjects")){ 

      numberOfMobileObjects = scanConfig.nextInt(); 
     } 

Я посмотрел на всем протяжении и не смогли найти ничего, что помогло моей ситуации. Любые советы по этому поводу будут прекрасными.

ответ

1

regex, который вы предоставили для разделителя, не делает то, что вы думаете. Вместо этого я бы взял .

String input = scanner.nextLine(); 
String[] array = input.split(":"); 
String label = array[0]; 
String data = array[1];  
String[] number = data.split(","); 
Integer x = new Integer(number[0]); 

Documentation for String#split()

+0

возможно сохранить в hashmap тогда? .. – Sionnach733

0

Ваш useDelimiter аргумент является неправильным. «[,:]» использует только один символ в качестве разделителя. Вы хотите любой набор из них. Просто измените его на: «[,:] +».

+0

, который все равно будет исключать – pedromss

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