Логический вопрос о строковом массиве с Java I / O - PullRequest
0 голосов
/ 28 апреля 2010

Мне нужно прочитать такую ​​строку из файла: 5 Председатель 12.49 РЕДАКТИРОВАТЬ: я хочу иметь возможность иметь больше строк данных.

Мне нужно разделить каждое слово / число на разные типы данных. Первый - int, второй - String, третий - double. Тогда мне нужно отформатировать их так: Пункт: Стул Цена: 12,49 $ Количество: 5

Теперь я знаю, как форматировать, единственная проблема, с которой я сталкиваюсь, - это разбор строковых элементов в их уважаемые типы данных (int, string, double).

Я пробовал:

String [] lines = lineInput.split(" ");
for(String displayLines : lines) {
    bufferedWriter.write(displayLines);
    bufferedWriter.newLine();
    System.out.println(displayLines);
}

но это только отделяет каждую строку в новую строку, и я не мог на всю жизнь понять, как заставить каждую строку проверять, является ли она целой, строковой или двойной.

Тогда я возился с подстрокой, но не смог заставить это работать. Я даже думал об использовании функции mod% и если:

if(lines.length % 2 == 0) {it's a string}; 

но это будет работать только для первой строки.

Пожалуйста, поверьте мне, когда я говорю, что попробовал это сам, а не просто прилагал немного усилий. Я просто сдаюсь. StackOverFlow, ты моя единственная надежда: (

Ответы [ 3 ]

2 голосов
/ 28 апреля 2010

Если у вас есть строки в формате [int] [String] [double], вы можете сделать:

String [] line = lineInput.split(" ");
int x = Integer.parseInt(line[0]);
String s = line[1];
double d = Double.parseDouble(line[2]);

При необходимости вы можете изменить это для обработки строк в разных форматах.

0 голосов
/ 28 апреля 2010

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


    String [] words = lineInput.split(" "); 
    if (words.length != 2) 
       System.err.println ("Error parsing line [" + lineInput + "]: " + wrong number of tokens on line");
    else
       try {
         int numberOfItems = Integer.parseInt(words[0]);
         String itemName = words[1];
         double itemPrice = Double.parseDouble(words[2]);
         System.out.println (itemName + " Price: $" + itemPrice + " Quantity: " + numberOfItems);
       } catch (NumberFormatException ex) {
          System.err.println ("Error parsing line [" + lineInput + "]: " + ex);
       }
    } 

0 голосов
/ 28 апреля 2010

Я не понимаю, почему вы разбиваете строки на основе пробелов.

Но в любом случае, я думаю, что для решения вашей проблемы посмотрите Integer.parseInt (), Double.parseDouble (). Если вам нужно проверить что-то, это число, вы можете использовать соответствующее регулярное выражение (см. Метод String.matches ()). Или грязный способ, который мог бы работать для вашего случая, - это вызвать один из методов анализа и посмотреть, вызывает ли он исключение ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...