如何将文件输入拆分为两个不同的java数组
如何将文件输入文本拆分为两个不同的数组?我想用n数组表示姓名,用数组表示电话号码。我设法做了文件输入,但我尝试了一切,似乎不能分割的名称和数字,然后把它分为两个不同的数组。我是诺布,请帮忙 以下是phonebook.txt文件的外观 本·阿里,1110001111如何将文件输入拆分为两个不同的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 这家
亚历克斯·卡德尔,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。我尝试了导入,但运行时崩溃了。无论如何,谢谢你的回复