从文本文件中读取数据并验证它

时间:2016-11-28 12:08:28

标签: java multidimensional-array text-files

我有一个文本文件,我需要从中读取数据到2D数组。该文件包含字符串和数字。

String[][] arr = new String[3][5];    
BufferedReader br = new BufferedReader(new FileReader("C:/Users/kp/Desktop/sample.txt"));    
String line = " ";    
String [] temp;
    int i = 0;
    while ((line = br.readLine())!= null){ 
        temp = line.split(" "); 
        for (int j = 0; j<arr[i].length; j++) {    
            arr[i][j] = (temp[j]);
        }
        i++;
    }

示例文本文件是: 姓名年龄工资ID性别
jhon 45 4900 22 M
janey 33 4567 33 F
philip 55 5456 44 M

现在,当名称是单个单词而中间没有任何空格时,代码可以正常工作。但是当名字像“jhon desuja”时它不起作用。怎么克服这个?

我需要将它存储在2d数组中。如何验证输入?如名称不应包含数字或年龄不应为负数或包含字母。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

正则表达式可能是更好的选择:

Pattern p =     Pattern.compile("(.+) (\\d+) (\\d+) (\\d+) ([MF])");
String[] test = new String[]{"jhon 45 4900 22 M","janey 33 4567 33 F","philip 55 5456 44 M","john mayer 56 4567 45 M"};
for(String line : test){
  Matcher m = p.matcher(line);
  if(m.find())
    System.out.println(m.group(1) +", " +m.group(2) +", "+m.group(3) +", " + m.group(4) +", " + m.group(5));
}

会返回

jhon, 45, 4900, 22, M
janey, 33, 4567, 33, F
philip, 55, 5456, 44, M
john mayer, 56, 4567, 45, M