Java扫描程序将数据与输入文件分开

时间:2014-12-08 08:48:01

标签: java

我是java的新手,我现在有点困惑。我试图从文件中获取一些输入数据,然后解析它/并为其提供正确的字段。例如,我的“in.txt”

Number: 2 Gender: 1 City: 4 Car: 7       
Gender: 1 City: 4 Number: 1                                                                                 
City: 2 Car: 1 Number: 3

我正试图到达数字等于2和性别等于1,而城市等于4等等。到目前为止,我能够使用java的扫描仪来读取文件,所以我知道它正确读取。那么我怎样才能将名称与数字对应(数字:2)。每当它看到“:”时我应该拆分线吗?就像给它一个左侧和右侧,或者用“性别:1城市:4 ......”搞乱其余部分?我正在尝试不同的东西,因为我正在输入这个,而我只是陷入了如何将数据与文件分开的问题。我非常感谢任何帮助。谢谢。这是我用来获取文件的扫描仪文件。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class example{
  public static void main(String[] args) throws FileNotFoundException{
    File inFile = new File("in.txt");
    Scanner input = new Scanner(inFile);
    while(input.hasNext()){
        String line = input.nextLine();
        System.out.println(line);
    }   
  }
}

3 个答案:

答案 0 :(得分:2)

如果您的文件或行始终按照您的描述进行构建,则可以拆分空格并在数组中搜索所需的值,例如: "Number:"(如有必要,您可以删除“:”),然后在此position + 1处观看数组,并且值为。

分裂为“:”将以这样的数组结束:

{[Number],[ 2 Gender],[ 1 City],[ 4 Car],[ 7]}

所以我认为这不是最好的解决方案。

答案 1 :(得分:0)

解决每行中识别每个键/值对的问题的一种方法是使用正则表达式来查找一行中的每一对。 Java Tutorials on Regular Expressions为该主题提供了一个良好且相当全面的起点。

为了让您开始这一点,正则表达式[A-Za-z]+: [0-9]+将为您隔离每个键值对,而正则表达式助手(如this web page at regexplanet.com)将极大地帮助您进行测试并开始识别你需要的代码。

答案 2 :(得分:0)

你想得到这些数字吗? 1: 如果我理解正确,你可以这样做。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Number {   
    public static void main(String[] args) {
        String regex = "\\d+";
        String candidate = "Number: 2 Gender: 1 City: 4 Car: 7  ";

        Pattern p = Pattern.compile(regex);
        Matcher matcher = p.matcher(candidate);
        while(matcher.find()){
            System.out.println(matcher.group());
        }
    }
}

2:如果你可以格式化你的数据,你可以格式化为JSON,并使用json-lib.jar