如何将文件输入拆分为两个不同的java数组

如何将文件输入拆分为两个不同的java数组,java,arrays,file-io,phonebook,Java,Arrays,File Io,Phonebook,如何将文件输入文本拆分为两个不同的数组?我想用n数组表示姓名,用数组表示电话号码。我设法做了文件输入,但我尝试了一切,似乎不能分割的名称和数字,然后把它分为两个不同的数组。我是诺布,请帮忙 以下是phonebook.txt文件的外观 本·阿里,1110001111 亚历克斯·卡德尔,8943257000 波赫凯蒙,3247129843 Diego Amezquita,1001010000 大麦树,7776665555 Yo Madow,1110002233 南加州大学,5252521551 这家

如何将文件输入文本拆分为两个不同的数组?我想用n数组表示姓名,用数组表示电话号码。我设法做了文件输入,但我尝试了一切,似乎不能分割的名称和数字,然后把它分为两个不同的数组。我是诺布,请帮忙

以下是phonebook.txt文件的外观

本·阿里,1110001111
亚历克斯·卡德尔,8943257000
波赫凯蒙,3247129843
Diego Amezquita,1001010000
大麦树,7776665555
Yo Madow,1110002233
南加州大学,5252521551
这家伙,7776663333
我和我,000999221
贾斯汀·百里香,1113332222
嘿哦,399339
自由人,4533819911
彼得·派珀,6480013966
威廉·穆洛克,9059671045

下面是我的代码

   import java.io.*;
   import java.util.Scanner;
   import java.io.FileInputStream;
   import java.io.FileNotFoundException;
   import java.io.IOException;
   import java.io.InputStreamReader;
   import java.io.BufferedReader;
   public class demos {
   public static void main(String[]  args){

    FileInputStream Phonebook;  
    DataInputStream In;
    int i = 0;

     String fileInput;  
      try  
      { 

            Phonebook = new FileInputStream("phonebook.txt"); 

            FileReader fr = new FileReader("phonebook.txt");
            BufferedReader br = new BufferedReader(fr);
            String buffer;
            String fulltext="";
            while ((buffer = br.readLine()) != null) {

                fulltext += buffer;

               // System.out.println(buffer);

                String names = buffer;
                char [] Y ; 
                Y = names.toCharArray();
                System.out.println(Y);

      }}
         catch (FileNotFoundException e)  
            { 
            System.out.println("Error - this file does not exist"); 
         }  
        catch (IOException e)   
        { 
            System.out.println("error=" + e.toString() ); 

         }

如果您使用Java 8,则可以简化它:

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;

public class Test {
    static ArrayList<String> names = new ArrayList<String>();
    static ArrayList<String> numbers = new ArrayList<String>();

    /**
     * For each line, split it on the comma and send to splitNameAndNum()
     */
    public static void main(String[] args) throws IOException {
        Files.lines(new File("L:\\phonebook.txt").toPath())
        .forEach(l -> splitNameAndNum(l.split(",")));
    }

    /**
     * Accept an array of length 2 and put in the proper ArrayList
     */
    public static void splitNameAndNum(String[] arr) {
        names.add(arr[0]);
        numbers.add(arr[1]);
    }
}
导入java.io.File;
导入java.io.IOException;
导入java.nio.file.Files;
导入java.util.ArrayList;
公开课考试{
静态ArrayList名称=新ArrayList();
静态ArrayList编号=新ArrayList();
/**
*对于每一行,用逗号将其拆分并发送到splitNameAndNum()
*/
公共静态void main(字符串[]args)引发IOException{
Files.lines(新文件(“L:\\phonebook.txt”).toPath()
.forEach(l->splitNameAndNum(l.split(“,”));
}
/**
*接受长度为2的数组并放入适当的ArrayList
*/
公共静态void splitNameAndNum(字符串[]arr){
名称。添加(arr[0]);
编号。添加(arr[1]);
}
}
在Java 7中:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import java.util.ArrayList;

public class Test {
    static ArrayList<String> names = new ArrayList<String>();
    static ArrayList<String> numbers = new ArrayList<String>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("L:\\phonebook.txt")));

        String line;

        while ((line = br.readLine()) != null) {
            splitNameAndNum(line.split(","));
        }
    }

    /**
     * Accept an array of length 2 and put in the proper ArrayList
     */
    public static void splitNameAndNum(String[] arr) {
        names.add(arr[0]);
        numbers.add(arr[1]);
    }
}
导入java.io.BufferedReader;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
公开课考试{
静态ArrayList名称=新ArrayList();
静态ArrayList编号=新ArrayList();
公共静态void main(字符串[]args)引发IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(新文件InputStream(“L:\\phonebook.txt”));
弦线;
而((line=br.readLine())!=null){
splitNameAndNum(行分割(“,”);
}
}
/**
*接受长度为2的数组并放入适当的ArrayList
*/
公共静态void splitNameAndNum(字符串[]arr){
名称。添加(arr[0]);
编号。添加(arr[1]);
}
}

如果您使用Java 8,则可以简化它:

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;

public class Test {
    static ArrayList<String> names = new ArrayList<String>();
    static ArrayList<String> numbers = new ArrayList<String>();

    /**
     * For each line, split it on the comma and send to splitNameAndNum()
     */
    public static void main(String[] args) throws IOException {
        Files.lines(new File("L:\\phonebook.txt").toPath())
        .forEach(l -> splitNameAndNum(l.split(",")));
    }

    /**
     * Accept an array of length 2 and put in the proper ArrayList
     */
    public static void splitNameAndNum(String[] arr) {
        names.add(arr[0]);
        numbers.add(arr[1]);
    }
}
导入java.io.File;
导入java.io.IOException;
导入java.nio.file.Files;
导入java.util.ArrayList;
公开课考试{
静态ArrayList名称=新ArrayList();
静态ArrayList编号=新ArrayList();
/**
*对于每一行,用逗号将其拆分并发送到splitNameAndNum()
*/
公共静态void main(字符串[]args)引发IOException{
Files.lines(新文件(“L:\\phonebook.txt”).toPath()
.forEach(l->splitNameAndNum(l.split(“,”));
}
/**
*接受长度为2的数组并放入适当的ArrayList
*/
公共静态void splitNameAndNum(字符串[]arr){
名称。添加(arr[0]);
编号。添加(arr[1]);
}
}
在Java 7中:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import java.util.ArrayList;

public class Test {
    static ArrayList<String> names = new ArrayList<String>();
    static ArrayList<String> numbers = new ArrayList<String>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("L:\\phonebook.txt")));

        String line;

        while ((line = br.readLine()) != null) {
            splitNameAndNum(line.split(","));
        }
    }

    /**
     * Accept an array of length 2 and put in the proper ArrayList
     */
    public static void splitNameAndNum(String[] arr) {
        names.add(arr[0]);
        numbers.add(arr[1]);
    }
}
导入java.io.BufferedReader;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
公开课考试{
静态ArrayList名称=新ArrayList();
静态ArrayList编号=新ArrayList();
公共静态void main(字符串[]args)引发IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(新文件InputStream(“L:\\phonebook.txt”));
弦线;
而((line=br.readLine())!=null){
splitNameAndNum(行分割(“,”);
}
}
/**
*接受长度为2的数组并放入适当的ArrayList
*/
公共静态void splitNameAndNum(字符串[]arr){
名称。添加(arr[0]);
编号。添加(arr[1]);
}
}
对于完整的功能性(而非强制性)解决方案,我建议您:

public static void main(String[] args) throws IOException {
    Object[] names = Files.lines(new File("phonebook.txt").toPath()).map(l -> l.split(",")[0]).toArray();
    Object[] numbers = Files.lines(new File("phonebook.txt").toPath()).map(l -> l.split(",")[1]).toArray();


    System.out.println("names in the file are : ");
    Arrays.stream(names).forEach(System.out::println);
    System.out.println("numbers in the file are : ");
    Arrays.stream(numbers).forEach(System.out::println);
}
输出<代码> 文件中的名称为: 宾阿里 亚历克斯·卡德尔 波凯蒙 迭戈·阿梅茨基塔 太麦树 马多 南尾 这家伙 我和我 贾斯汀百里香 哎哟 自由人 吹笛手 威廉·穆洛克 文件中的数字为: 1110001111 8943257000 3247129843 1001010000 7776665555 1110002233 5252521551 7776663333 0009991221 1113332222 3939399339 4533819911 6480013966 9059671045

正如您所见,Functional编程既短又智能…。当您习惯了一个全功能的(而不是强制性的)解决方案时,您会发现这一点:

public static void main(String[] args) throws IOException {
    Object[] names = Files.lines(new File("phonebook.txt").toPath()).map(l -> l.split(",")[0]).toArray();
    Object[] numbers = Files.lines(new File("phonebook.txt").toPath()).map(l -> l.split(",")[1]).toArray();


    System.out.println("names in the file are : ");
    Arrays.stream(names).forEach(System.out::println);
    System.out.println("numbers in the file are : ");
    Arrays.stream(numbers).forEach(System.out::println);
}
输出<代码> 文件中的名称为: 宾阿里 亚历克斯·卡德尔 波凯蒙 迭戈·阿梅茨基塔 太麦树 马多 南尾 这家伙 我和我 贾斯汀百里香 哎哟 自由人 吹笛手 威廉·穆洛克 文件中的数字为: 1110001111 8943257000 3247129843 1001010000 7776665555 1110002233 5252521551 7776663333 0009991221 1113332222 3939399339 4533819911 6480013966 9059671045


正如您所见,Functional编程既短又智能…。当您习惯于将下一行保存字符串拆分为数组时,这将非常容易。第一个元素进入第一个列表,第二个元素进入第二个列表。用于在数组中拆分下一行保存字符串时拆分字符串。第一个元素进入第一个列表,第二个元素进入第二个列表。不幸的是,我的Eclipse程序来自卑诗省,所以当我尝试你的代码时,我的计算机爆炸了。谢谢你的解决方案,我会尝试升级我的程序。不幸的是,我的Eclipse程序来自B.C,所以当我尝试你的代码时,我的计算机会爆炸。谢谢你的解决方案,我会尝试升级我的程序,我没有Java8。我尝试了导入,但运行时崩溃了。无论如何,感谢您的回复,我将更新并重试。@TarjitSaini编辑为包含simlar Java 7解决方案。我没有Java 8。我尝试了导入,但运行时崩溃了。无论如何,谢谢你的回复