从Java文件中扫描整数和字符串

时间:2018-10-21 04:33:13

标签: java file

我是Java的新手,必须读取文件,然后将读取的内容转换为变量。我的文件包含一个水果,然后一个价格,并且包含很长的清单。该文件如下所示:

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

到目前为止,我已经创建了两个变量(double priceString 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 :(得分:2)

因此,字符串a具有整行,如Apples,5。因此,请尝试用逗号将其分割并存储到变量中。

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

或者如果价格不是整数,则

double number = Double.parseDouble(arr[1]);

答案 1 :(得分:1)

使用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();
}

输出

{Apples=5, Kiwi=3, Bananas=4, Strawberry=8}

答案 2 :(得分:0)

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();
        }
    }
}

答案 3 :(得分:0)

您可以通过调用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);
    }
}