Nano Hash - криптовалюты, майнинг, программирование

Сканер - управление вводом из текстового файла

Я работаю с java Scanner, пытаясь извлечь информацию о продукте из текстового файла Inventory.txt.

Этот файл содержит данные о товарах в таком формате:

“Danelectro|Bass|D56BASS-AQUA|336177|395.00Orange|Amplifier|BT1000-H|319578|899.00Planet Waves|Superpicks|1ORD2-5|301075|4.50Korg|X50 Music Synthesizer|X50|241473|735.00Alpine|Alto Sax|AAS143|198490|795.00”

Я пытаюсь разобрать строки и добавить их в список массивов, чтобы каждый элемент в списке массивов выглядел примерно так:

"Danelectro|Bass|D56BASS-AQUA|336177|395.00"
"Orange|Amplifier|BT1000-H|319578|899.00"    
"KorPlanet Waves|Superpicks|1ORD2-5|301075|4.50"
"g|X50 Music Synthesizer|X50|241473|735.00"
"Alpine|Alto Sax|AAS143|198490|555.00”

Ниже приведен мой код:

public class ItemDao {        
    public ItemDao() {
        scanFile();
    }

    public void scanFile() {
        Scanner scanner; 
        ArrayList <String> content = new ArrayList <String>();
        try {
            Pattern p1 = Pattern.compile("\\.[0-9]{2}$");
            scanner = new Scanner(new File("Inventory.txt"));

            while (scanner.hasNext(p1)) {
                content.add(scanner.next(p1));
            }

            for (String item : content) {
                System.out.println("Items:" + item);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Когда я тестировал этот код, я обнаружил, что arraylist пуст. Любая помощь приветствуется.

Java-jar A00123456Lab5.jar

Создайте класс ItemDAO в пакете dao. Этот класс будет содержать статический внутренний класс, который реализует Comparator (DAO = объект доступа к данным)

13.05.2012

  • Вы проверили строку, извлеченную внутри цикла while, чтобы убедиться, что шаблон регулярного выражения ошибочен? Пожалуйста, сообщите нам о результатах ваших усилий по отладке этого. 13.05.2012
  • Спасибо за продолжение. Когда я тестировал свой цикл while, используя это регулярное выражение \\.[0-9]{2}$, я не передал ни одного элемента в мой список содержимого ArrayList. 13.05.2012
  • Я уточнил регулярное выражение до (.+[\\|]){4}.+[0-9]\\.[0-9]{2}? и теперь я добавляю первые две строки в ArrayList, но почему-то не все. Тем не менее, я думаю, что ошибка в моем регулярном выражении. 13.05.2012

Ответы:


1

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

while(scanner.hasNextLine()){
    String temp = scanner.nextLine();
    while(temp.indexOf("|") != -1){
        content.add(temp.substring(temp.indexOf("|"));
        temp.substring(temp.indexOf("|")+1);
    }    
}

Просто мысль - может быть проще отлаживать таким образом.

13.05.2012
  • Я бы использовал temp.split(|), чтобы дать вам массив строк в каждой строке. 13.05.2012

  • 2

    Вы можете определить сканер для строки и разделителя. Поскольку | используется в регулярном выражении как комбинатор ИЛИ, вы должны замаскировать его (двойной) обратной косой чертой:

    sc = new java.util.Scanner ("Danelectro|Bass|D56BASS-AQUA|336177|395.00");
    sc.useDelimiter ("\\|");
    
    String name = sc.next ();
    // name: java.lang.String = Danelectro
    String typ = sc.next ();
    // typ: java.lang.String = Bass
    String model = sc.next
    // model: java.lang.String = D56BASS-AQUA
    int id = sc.nextInt ();
    // id: Int = 336177
    val d = sc.nextDouble ();
    // d: Double = 395.0
    
    13.05.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..