Сканирование целого числа и строки из файла в Java - PullRequest
0 голосов
/ 21 октября 2018

Я новичок в Java и должен прочитать файл, а затем преобразовать прочитанное в переменные.Мой файл состоит из фруктов, затем из цены и имеет длинный список этого.Файл выглядит следующим образом:

Bananas,4
Apples,5
Strawberry,8
...
Kiwi,3

До сих пор я создал две переменные (double price и String name), а затем настроил сканер, который читает из файла.

public void read_file(){
    try{
        fruits = new Scanner(new File("fruits.txt"));
        print_file();
    }
    catch(Exception e){
        System.out.printf("Could not find file\n");
    }                
}
public void print_file(){

    while(fruits.hasNextLine()){
        String a = fruits.nextLine();
        System.out.printf("%s\n", a);
        return;
    }
}

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

Ответы [ 4 ]

0 голосов
/ 21 октября 2018

Используя поток java 8 и улучшенные возможности чтения файлов, вы можете сделать это следующим образом.он сохраняет элемент и считается парой ключ-значение на карте.Впоследствии к нему легко получить доступ по ключу.

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

try (Stream<String> stream = Files.lines(Paths.get("src/test/resources/items.txt"))) {
    Map<String, Integer> itemMap = stream.map(s -> s.split(","))
            .collect(toMap(a -> a[0], a -> Integer.valueOf(a[1])));
    System.out.println(itemMap);
} catch (IOException e) {
    e.printStackTrace();
}

output

{Apples=5, Kiwi=3, Bananas=4, Strawberry=8}
0 голосов
/ 21 октября 2018
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Test {

    public static void main(String[] args) {
        BufferedReader reader;
        try {
            reader = new BufferedReader(new FileReader(
                    "C://Test/myfile.txt")); //Your file location
            String line = reader.readLine(); //reading the line
            while(line!=null){
                if(line!=null && line.contains(",")){
                    String[] data = line.split(",");
                    System.out.println("Fruit:: "+data[0]+" Count:: "+Integer.parseInt(data[1]));
                }
                //going over to next line
                line  = reader.readLine();
            }               
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
0 голосов
/ 21 октября 2018

Вы можете указать разделитель для сканера, вызвав метод useDelimiter, например:

public static void main(String[] args) {
    String str = "Bananas,4\n" + "Apples,5\n" + "Strawberry,8\n";

    try (Scanner sc = new Scanner(str).useDelimiter(",|\n")) {
        while (sc.hasNext()) {
            String fruit = sc.next();
            int price = sc.nextInt();

            System.out.printf("%s,%d\n", fruit, price);
        }
    } catch (Exception e) {
        e.printStackTrace(System.out);
    }
}
0 голосов
/ 21 октября 2018

Итак, ваша строка a имеет целую строку, например Apples,5Поэтому попробуйте разделить его запятыми и сохранить в переменных.

String arr[] = a.split(",");
String name = arr[0];
int number = Integer.parseInt(arr[1]); 

Или, если цены не являются целыми числами, то

double number = Double.parseDouble(arr[1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...