Чтение из .txt и сохранение в Hashmap - PullRequest
0 голосов
/ 29 декабря 2011

Можно ли использовать любой другой подход для чтения строки, разделенной точкой с запятой, из файла .txt в карту Has вместо * sourceArra * y

 public static void main(String[] args) throws IOException {
    try {
        ArrayList<Synset> booleansynsets = null;
        ArrayList<Synset> booleanduplicatesynsets = null;
        Map<String, String> basebooleanentitieslist = new HashMap<String, String>();
        BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\Users\\anand\\Desktop\\updatedDuplicateBooleanEntitiesList-sorted.txt"));
        String line = "";
        while ((line = bufferedReader.readLine()) != null) {
            String[] sourceArray = line.split(";");
            basebooleanentitieslist.put(sourceArray[0],sourceArray[1]);
            System.out.println(line);
        }

// обновленный

bufferedReader.toString();
        StringTokenizer st1 = new StringTokenizer(bufferedReader.toString(),";");
        while ((line = bufferedReader.readLine()) != null && st1.hasMoreTokens()) {
  //                String[] sourceArray = line.split(";");

            basebooleanentitieslist.put(st1.nextToken(";"), st1.nextToken());
            System.out.println(line);
        }

Ответы [ 3 ]

0 голосов
/ 29 декабря 2011

Вы можете использовать StringTokenizer (или) Split.

0 голосов
/ 29 декабря 2011

Нет проблем с текущим подходом, но я чувствовал, насколько он длинен, я имею в виду, есть ли способ оптимизировать его без использования sourceArray.

Вы не говорите, что вы пытаетесь оптимизировать: производительность? использование памяти? читаемость

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

Что конкретно не так с использованием массива? (Да, я знаю, что выделение массива чего-то стоит, но есть ли у вас доказательства того, что это важно?)


Если вы пытаетесь оптимизировать для удобства чтения, я бы сказал, что использование String.split, вероятно, более читабельно для этого примера. (Многие Java-программисты никогда не сталкивались / не использовали класс StringTokenizer.)

Если вы пытаетесь оптимизировать производительность / использование памяти, тогда стоит попробовать StringTokenizer, но я не гарантирую, что это быстрее. Другая альтернатива - использовать Pattern и Matcher напрямую следующим образом:

    Pattern pattern = Pattern.compile("([^;]*);(.*)");
    while ((line = bufferedReader.readLine()) != null) {
        Matcher matcher = pattern.matcher(line)
        if (matcher.matches()) {
            basebooleanentitieslist.put(matcher.group(1), matcher.group(2));
        }
    }

(Кстати, код about будет обрабатывать случай, когда строка не разделится изящно; то есть, не выбрасывая исключение. Если вы хотите явно разобраться с этим, добавьте предложение else.)

0 голосов
/ 29 декабря 2011

Рассмотрите возможность использования класса StringTokenizer.

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