java:从txt文件中读数据到数组中。
txt文件中为112375624895373987763……之类的,每三个一组,第一个为city的id,第二个为x坐标,第三个为y坐标。怎么从txt文件中读数据然后赋值给...
txt文件中为1 123 756 2 489 537 3 987 763……之类的,每三个一组,第一个为city的id,第二个为x坐标,第三个为y坐标。怎么从txt文件中读数据然后赋值给数组,每三个为一个数组,数组格式应该包含city的id和x,y坐标。
能解释一下吗?我看你写的只有一个数组吧,我的是要从里面读出的数据全部保存在一系列数组里,比如c[100][],c[1][]={1,123,756},c[2][]={2,489,537}这样的。 展开
能解释一下吗?我看你写的只有一个数组吧,我的是要从里面读出的数据全部保存在一系列数组里,比如c[100][],c[1][]={1,123,756},c[2][]={2,489,537}这样的。 展开
2个回答
展开全部
package guoqing03;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class TxtToArray {
public static void main(String[] args) {
//根据城市id,来获得相应的数组,你可以通过改变id来获得不同的数组
int id = 2;
int[] city = getCityLocation(id);
System.out.println(Arrays.toString(city));
}
/**
* @param id 传入一个城市id,指代需要查询的是那个城市
* @return int[] 返回一个数组 如 [2, 489, 537]
*/
public static int[] getCityLocation(int id) {
//大家都懂的我方法全是用的静态方法,获得包含所有城市数据的一个数组
int[] citys = getAllCitys();
int[] city = new int[3];
int j = 0;
//根据用户的id来获取不同城市的数组并返回
for(int i=id*3-3; i<3*id; i++) {
city[j] = citys[i];
j++;
}
return city;
}
/**
* @return 返回包换全部城市的一个数组
*/
public static int[] getAllCitys() {
//“city.txt”我是放在当前项目下面的,要是你不要包名呢,直接放到你的当前目录下面就OK了
File file = new File("citys.txt");
//定义一个数据流管道哈
BufferedReader read = null;
//StringBuffer嘛 是一个很常用到的方法,给String一样,只是
//这个东西拼接字符串速度比较快,效率高
StringBuffer strbuf = new StringBuffer("");
String str = "";
try {
read = new BufferedReader(
new InputStreamReader(
new FileInputStream(file)));
if((str = read.readLine()) != null) {
//字符串拼接,你懂的
strbuf.append(str);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将StringBuffer类型转换成String类型
String strbuf2 = new String(strbuf);
//利用正则表达式将String撇开成一个Sring数组
String[] strCitys = strbuf2.split("\\s+");
int[] citys = new int[strCitys.length];
//将String数组转换成int数组
for(int i=0; i<strCitys.length; i++) {
String strCity = strCitys[i];
citys[i] = Integer.parseInt(strCity);
}
return citys;
}
//程序缺陷:1.没有实现人机交互,不过也没必要
// 2.没有对用户的id值进行判断,是否符合要求,超出范围程序会出
// java.lang.ArrayIndexOutOfBoundsException的异常
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class TxtToArray {
public static void main(String[] args) {
//根据城市id,来获得相应的数组,你可以通过改变id来获得不同的数组
int id = 2;
int[] city = getCityLocation(id);
System.out.println(Arrays.toString(city));
}
/**
* @param id 传入一个城市id,指代需要查询的是那个城市
* @return int[] 返回一个数组 如 [2, 489, 537]
*/
public static int[] getCityLocation(int id) {
//大家都懂的我方法全是用的静态方法,获得包含所有城市数据的一个数组
int[] citys = getAllCitys();
int[] city = new int[3];
int j = 0;
//根据用户的id来获取不同城市的数组并返回
for(int i=id*3-3; i<3*id; i++) {
city[j] = citys[i];
j++;
}
return city;
}
/**
* @return 返回包换全部城市的一个数组
*/
public static int[] getAllCitys() {
//“city.txt”我是放在当前项目下面的,要是你不要包名呢,直接放到你的当前目录下面就OK了
File file = new File("citys.txt");
//定义一个数据流管道哈
BufferedReader read = null;
//StringBuffer嘛 是一个很常用到的方法,给String一样,只是
//这个东西拼接字符串速度比较快,效率高
StringBuffer strbuf = new StringBuffer("");
String str = "";
try {
read = new BufferedReader(
new InputStreamReader(
new FileInputStream(file)));
if((str = read.readLine()) != null) {
//字符串拼接,你懂的
strbuf.append(str);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将StringBuffer类型转换成String类型
String strbuf2 = new String(strbuf);
//利用正则表达式将String撇开成一个Sring数组
String[] strCitys = strbuf2.split("\\s+");
int[] citys = new int[strCitys.length];
//将String数组转换成int数组
for(int i=0; i<strCitys.length; i++) {
String strCity = strCitys[i];
citys[i] = Integer.parseInt(strCity);
}
return citys;
}
//程序缺陷:1.没有实现人机交互,不过也没必要
// 2.没有对用户的id值进行判断,是否符合要求,超出范围程序会出
// java.lang.ArrayIndexOutOfBoundsException的异常
}
追问
这个不错,我还有个问题阿,实际上我的txt文件中坐标值是double类型的,改了一下你现在的代码,可以运行,只是那个split()中怎么可以能让分行符也可以作为隔断呢,因为老师给的txt文件中每三个元素就是一行,而不是空格。呵呵。
追答
首先你得知道这个split("\\s+")方法的作用,是将字符串撇开,然后存放到String[]的数组里面,“\\s+”,也算是一个简单的正则表达式吧,你要是不清楚什么正则表达式,那自己可以查下资料,在说我前面是用的 read.readLine()方法,然后将读到的内容全部拼接到一起,然后在对整个字符串进行拆分,所以不存在你提行或者不提行的问题,只要你文件厘米的数据是按照3个一组的规则来写得就OK了,我只数你有多少数字,不看你提行不提行。希望对你有帮助,要是觉得回答的不错,还望给哥采纳。
展开全部
public static void main(String[]args) {
//load file to str
String[]std=str.split("\\s");
for(int i=0;i<std.length;i+=3){
int[]d=new int[3];
d[0]=Integer.parseInt(std[0]);
d[1]=Integer.parseInt(std[1]);
d[2]=Integer.parseInt(std[2]);
//add list
}
//load file to str
String[]std=str.split("\\s");
for(int i=0;i<std.length;i+=3){
int[]d=new int[3];
d[0]=Integer.parseInt(std[0]);
d[1]=Integer.parseInt(std[1]);
d[2]=Integer.parseInt(std[2]);
//add list
}
追问
我有问题补充,你写的没法运行啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询