大家好!有一个java查找txt文本的问题,小弟还是一java菜菜,想了许久不知如何解决..

Αμπάι. 2012-03-07 01:10:06
问题如下
这是一个我要查找的文本信息

妾发初覆额:1
折花门前剧:2
郎骑竹马来:3
绕床弄青梅:4
同居长干里:5
两小无嫌猜:6
十四为君妇:7
羞颜未尝开:8
低头向暗壁:9
千唤不一回:10
十五始展眉:11
愿同尘与灰:12
常存抱柱信:13

比如我现在输入一个查找条件 “同居长干里” 然后返回这一条整条信息 “同居长干里:5”

我想了许久,还是不知该如何解决,还请各位路过的大师们帮帮忙!
...全文
261 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
查jdk文档
FileReader BufferedReader
String
补习补习java基础
[Quote=引用 1 楼 bill0605030109 的回复:]

Java code

public static void main(String[] args) throws Exception
{
System.out.println(test());
}
public static String test() throws Exception
{
String input = new S……
[/Quote]
MiceRice 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 fnsx_wfs 的回复:]
我本是这样想的

先取一定长度的的文本到缓存,然后查找,如果没找到,就在读取下一段。

但不知代码该怎么写效率更好....
[/Quote]

那你这个还是一次性扫描,这个不需要自己写代码去缓存,直接用1楼的代码,就已经实现了。

无非是可以设置下BufferedReader(Reader in, int inputBufferSize)的缓存区大小而已。
Αμπάι. 2012-03-07
  • 打赏
  • 举报
回复
我本是这样想的

先取一定长度的的文本到缓存,然后查找,如果没找到,就在读取下一段。

但不知代码该怎么写效率更好....
Sammie 2012-03-07
  • 打赏
  • 举报
回复
LZ你想要的效果就是查找指定诗为第几行吧

有200多万条用Map好像是有点不够效率

除了逐行查找然后逻辑判断

关注更优化效率的方法...
MiceRice 2012-03-07
  • 打赏
  • 举报
回复
要么用1楼的一次扫描,要么就是全缓存起来,最后就是借助数据库。


至于200多万条,似乎不算是问题吧?

就算你有300万条,每条有100个字节,总计也就是3亿个字节,大概其不到300MB。

32位的JVM可以使用 1.5G 左右内存,你这个太小意思了。。。
Αμπάι. 2012-03-07
  • 打赏
  • 举报
回复
我不能选择Map大概有200多万条数据,全都是诗
京郊-金手指 2012-03-07
  • 打赏
  • 举报
回复
1L和2L的方法都可行,都能实现你的功能。请根据实际情况选择
  • 打赏
  • 举报
回复
只是简单实现你这里的描述的话
似乎方法挺多的= =~
不知你想了许久的症结在哪,找到问题才便于提高以及学会更好的想法
lyp907093825 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lxbccsu 的回复:]

引用 2 楼 ldh911 的回复:
另一种方法是,把文件中的内容,全部读取出来,并放入HashMap<String, Integer>中,Key就是冒号左边的内容,Value就是冒号右边的数字。

然后后面无论要查找的是啥,直接HashMap.get(str);就行了。

好处是可以一次读取后多次快速查找,缺点是有内存开销,因为整个文件都要载入内存中。

+++

楼主你就选……
[/Quote]
如果这个文档是动态更新的就有点麻烦啦。hashMap里面找不到,然后要更新HashMap;
lxbccsu 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ldh911 的回复:]
另一种方法是,把文件中的内容,全部读取出来,并放入HashMap<String, Integer>中,Key就是冒号左边的内容,Value就是冒号右边的数字。

然后后面无论要查找的是啥,直接HashMap.get(str);就行了。

好处是可以一次读取后多次快速查找,缺点是有内存开销,因为整个文件都要载入内存中。
[/Quote]
+++

楼主你就选这种做法吧,在开发中,对一些系统配置常量数据读取基本上都这么做(从DB中拿出,存在集合中),例子如级连菜单;
lwlianglove2 2012-03-07
  • 打赏
  • 举报
回复
1楼、2楼都已经解答了
Acesidonu 2012-03-07
  • 打赏
  • 举报
回复
先读取 str = br.readLine();
然后判断 str.indexOf("要查找的字符串") != -1
就返回
qqhw123 2012-03-07
  • 打赏
  • 举报
回复
用正则表达式吧! 匹配就更方便了。
MiceRice 2012-03-07
  • 打赏
  • 举报
回复
另一种方法是,把文件中的内容,全部读取出来,并放入HashMap<String, Integer>中,Key就是冒号左边的内容,Value就是冒号右边的数字。

然后后面无论要查找的是啥,直接HashMap.get(str);就行了。

好处是可以一次读取后多次快速查找,缺点是有内存开销,因为整个文件都要载入内存中。
  • 打赏
  • 举报
回复

public static void main(String[] args) throws Exception
{
System.out.println(test());
}
public static String test() throws Exception
{
String input = new Scanner(System.in).next();
String result = null;
FileReader fr = new FileReader("e:/a.txt");
BufferedReader br = new BufferedReader(fr);
String str = null;
while((str = br.readLine()) != null)
{
String tempStr = str.substring(0,5);
if(tempStr.equals(input))
{
result = str;
break;
}
}
br.close();
fr.close();
return result;
}
MiceRice 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 fnsx_wfs 的回复:]
MyEclipse 报出 这个错误 Java heap space ,不知该如何解决..?
[/Quote]

内存不足,把JVM启动内存设置大点。
Αμπάι. 2012-03-07
  • 打赏
  • 举报
回复
那是李白的诗....V_V
昨日凡阳 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bill0605030109 的回复:]

Java code

public static void main(String[] args) throws Exception
{
System.out.println(test());
}
public static String test() throws Exception
{
String input = new S……
[/Quote]

java讀取文件有很多方式,文件流就ok。

lz的詩句寫的不錯啊。學文的?
七_号 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acesidonu 的回复:]

先读取 str = br.readLine();
然后判断 str.indexOf("要查找的字符串") != -1
就返回
[/Quote] +1
Αμπάι. 2012-03-07
  • 打赏
  • 举报
回复
MyEclipse 报出 这个错误 Java heap space ,不知该如何解决..?
加载更多回复(1)

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧