java读取txt输出的问题,还有保存二维数组的问题

a.txt中文本为xxxx|xxxxxxxx|xxxx这种格式,代码如下importjava.io.*;publicclassTest{publicstaticvoidm... a.txt中文本为
xxxx|xxxx
xxxx|xxxx这种格式,
代码如下
import java.io.*;
public class Test{
public static void main(String[]args)
throws IOException{
StringBuffer sb=new StringBuffer();
BufferedReader br=new BufferedReader(new FileReader("D:\\a.txt"));
String s=br.readLine();
while(s!=null){
sb.append(s);
s=br.readLine();
}
br.close();
s=sb.toString();
String[]str=s.split("\\|");
for(String x:str)
System.out.println(x);
}
}

运行结果是这样的
username1
password1username2
password2username3
password3username4
password4username5
password5username6
password6username7
password7
————————————
希望输出结果如下
username1 password1
username2 password2
username3 password3
username4 password4
username5 password5
username6 password6
username7 password7
该怎么写,再如何把username和password存进一个二维数组,求解答,给完整代码,会有加分。
展开
 我来答
nggno1
2012-10-10 · TA获得超过351个赞
知道小有建树答主
回答量:768
采纳率:0%
帮助的人:420万
展开全部
楼主主题思路没错,但处理细节有误。
1 读文件按行来读没问题,那就没必要再用一个StringBuffer来将已经分行的数据重新拼成一行再拆。
2 实际上你操作的过程如下:
将源文件中数据放在一个String中,内容为
username1|password1username2|……|password(X-1)usernameX|passwordX
然后利用|来拆分,变成
String[] str = {username1,password1username2,…… ,password(X-1)usernameX,passwordX}
再分行打印数组,自然就变成了你输出的情况
修改代码如下

import java.io.*;
public class Test{
public static void main(String[]args)throws IOException{
BufferedReader br=new BufferedReader(new FileReader("D:\\a.txt"));
String s=br.readLine();
while(s!=null){
s=br.readLine();
String[]str=s.split("\\|");

for(String x:str)
System.out.println(x);
}
br.close();
}
}
追问
确实是你说的问题,我知道我哪里错了,你那个代码我试了下
username2
password2
username3
password3
username4
password4
username5
password5
username6
password6
username7
password7
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:8)

第一个username和password怎么没有了···
追答
这个应该还和你的那个D:\\a.txt的完整内容有关。第一行有没有空啊,或者其他的一些原因都有关系的。hash表也可以,但我觉得没必要,代码会变得比较冗长
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
llei32wang
2012-10-10 · TA获得超过2736个赞
知道大有可为答主
回答量:1478
采纳率:60%
帮助的人:1407万
展开全部
为什么要用二维数组,用一个list不就行了。

import java.util.ArrayList;

import java.io.*;
public class Test{
public static void main(String[]args)
throws IOException{
StringBuffer sb=new StringBuffer();
BufferedReader br=new BufferedReader(new FileReader("D:\\a.txt"));
String s=br.readLine();
ArrayList list=new ArrayList();

while(s!=null){
System.out.println(s);
String[] str=s.split("\\|");
list.add(str);

sb.append(str[0]+" "+str[1]+"\r\n");
s=br.readLine();
}
br.close();
System.out.println(sb);
String[][] stri=new String[list.size()][2];
for(int i=0;i<list.size();i++){
String[] str =(String[])list.get(i);
stri[i][0]=str[0];
stri[i][1]=str[1];
}
for(int i=0;i<stri.length;i++){
System.out.println(stri[i][0]+" "+stri[i][1]);

}

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
慷慨且坦荡的小烤红薯L
2012-10-10 · TA获得超过605个赞
知道小有建树答主
回答量:1470
采纳率:75%
帮助的人:262万
展开全部
"username1 password1"

这之间不是有空格吗, 可以这样: "username1 password1".split(" ") ;
得到一个数组, 然后取出你要的值 , 放到数组即可, 但数组里要存 Map , 因为这是 key - value 对 。
更多追问追答
追问
a.txt中文本为 
xxxx|xxxx
xxxx|xxxx这种格式,
追答
"username1 password1".split(" ") ;

这里改这样
"username1 password1".split("|") ;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
oyhjlineer
2012-10-10
知道答主
回答量:8
采纳率:0%
帮助的人:1.1万
展开全部
你文件中的格式是不是
username1|password1
username2|passwork2
?
如果是这样,你在从文件中读取的时候、
String s=br.readLine();
while(s!=null){
sb.append(s);
s=br.readLine();
String[] temp = s.split("|");
System.out.print(temp[0]);
System.out.print(temp[1]);
//存入二维数组操作

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lhch1227
2012-10-10 · 超过18用户采纳过TA的回答
知道答主
回答量:221
采纳率:0%
帮助的人:32万
展开全部
做任务
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式