遇到了个郁闷的问题

BeFore27 2009-11-02 03:46:25
之前请教的一个程序 现在又遇到了一个问题
import java.util.HashMap; 
import java.util.Map;
import java.util.StringTokenizer;
import java.util.Map.Entry;

public class StringTokenization {
public static void main(String args[]) {

StringTokenizer stok = new StringTokenizer(args[0],"~@#$%^&* %!?,|. I am a");//这里是限制输出的字符串

Map <String, Integer> counter = new HashMap <String, Integer>();

while (stok.hasMoreTokens()) {
String str = stok.nextToken();
// System.out.println(str);
if(counter.get(str) != null){
counter.put(str, counter.get(str) + 1);
}else{
counter.put(str, 1);
}
}

for(Entry <String, Integer> entry : counter.entrySet()){
System.out.println(entry.getKey() + "=> + entry.getValue());
}
}
}




输入 "apple apple apple or or or or or"
输出 apple => 3
or =>5

新的问题是:
给你一篇文章 要求输出“排除限制输出的字符串 的剩下的字符串”
例如
输入 "I? am!| a boy
输出 boy=>1


给出的文章可以直接复制在Eclipse控制台内
但是如果限制输出(排除)的单词 有上千个()

给了一个txt文档(限制输出的字符串单词表)
如下
a
about
above
across
after
afterwards
again
against
all
almost
alone
along
already
also
although
always
............(a字母开头的 一直到az 还有b开头 c d e f)

有什么办法引用这个文件吗
不会是直接复制到那个限制区域的函数里面吧
编辑成 a about above across after afterwards again against all almost alone along already also although always am among amongst amoungst amount an and another any anyhow anyone anything anyway anywhere are around as 这种形式都会累死


可能描述的有乱 见谅啊.
...全文
217 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
有点乱

楼主好帅
BeFore27 2009-11-03
  • 打赏
  • 举报
回复
如果不用 读取文件 的方式 直接修改程序 把需要跑掉的单词复制到程序里
怎么修改成能够分析的呢
BeFore27 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 brodie 的回复:]
纯帮忙。因为已经超出了StringTokenizer的能力,所以做了一个内部类,保存一下排除的单词。
虽然不知道你要做什么,但感觉和分词有关。呵呵
[/Quote]
谢谢你 但是我怎么只能输出文章中的第一个单词
juneman 2009-11-03
  • 打赏
  • 举报
回复
高手们
Brodie 2009-11-03
  • 打赏
  • 举报
回复
纯帮忙。因为已经超出了StringTokenizer的能力,所以做了一个内部类,保存一下排除的单词。
虽然不知道你要做什么,但感觉和分词有关。呵呵

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

public class StringTokenization {
public static void main(String args[]) {
//限制输出的字符串一部份从文件读,一部通过addExclude(),
//格式要求空格分隔
String excludeString = "~ @ # $ % ^ & * % ! ? , | . I am a";
StringAnalyzer analyzer = new StringAnalyzer("c:/a.txt");
analyzer.addExclude(excludeString);
Map <String, Integer> counter = new HashMap <String, Integer>();

if(args.length > 0 && args[0] != null){
//以空格分隔
String[] words = args[0].split(" ");
for(String s : words){
//非排除,计数
if(!analyzer.isExclude(s)){
if(counter.get(s) != null){
counter.put(s, counter.get(s) + 1);
}else{
counter.put(s, 1);
}
}

}
}

for(Entry <String, Integer> entry : counter.entrySet()){
System.out.println(entry.getKey() + "=>" + entry.getValue());
}
}

static class StringAnalyzer{
private Set<String> excludes = new HashSet<String>();


public StringAnalyzer(String path) {
this.init(path);
}

/**
* 读取TXT中排除的单词
* @param path
*/
private void init(String path){
//读文件
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
String line = null;
while((line = reader.readLine()) != null){
if(line.trim().length() > 0)
addExclude(line);
}
reader.close();
} catch (Exception e) {
throw new RuntimeException("无法读取TXT文件", e);
}
}

public void addExclude(String s){
String[] parts = s.split(" ");
for(String p : parts){
excludes.add(p);
}
}

/**
* 判断是不是EXCLUDE
* @param string
* @return
*/
public boolean isExclude(String string){
return excludes.contains(string);
}
}
}
BeFore27 2009-11-03
  • 打赏
  • 举报
回复
楼上高手在吗
swandragon 2009-11-03
  • 打赏
  • 举报
回复

private static Map<String,Integer> parseStr(String str,Map<String,Integer> map){
StringTokenizer stok = new StringTokenizer(str);
while(stok.hasMoreTokens()){
String tmp = stok.nextToken();
if(map.get(tmp) != null){
map.put(tmp,map.get(tmp)+1);
}else
map.put(tmp,1);
}
return map;
}

public static void main(String[] args){

Map<String,Integer> filterMap = new HashMap<String,Integer>();
String fileterStr = "I a word";
//解析过滤单词,放进map
filterMap = parseStr(fileterStr,filterMap);
String contentStr = "I am a boy";
Map<String,Integer> contentMap = new HashMap<String,Integer>();
//解析内容单词,放进map
contentMap = parseStr(contentStr,contentMap);
Set<String> keySet = filterMap.keySet();
Iterator<String> it = keySet.iterator();
//遍历过滤单词map,删除内容过滤map中的过滤单词
while(it.hasNext()){
String stmp = it.next();
if(contentMap.get(stmp) != null){
contentMap.remove(stmp);
}
}
keySet = contentMap.keySet();
it = keySet.iterator();
while(it.hasNext()){
String key = it.next();
System.out.println(key +"--> "+ contentMap.get(key));
}
}
swandragon 2009-11-03
  • 打赏
  • 举报
回复
用StringTokenizer解析文章和过滤单词文件
取出里面的单词放到map中
之后遍历map去除过滤单词
zl3450341 2009-11-02
  • 打赏
  • 举报
回复
学习学习

帮顶下
BeFore27 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 viszl 的回复:]
上面写错了点,改一下
用BufferedReader读取一行
再对着一行字符串进行词法分析,用正则剔除非法字符,然后split存到Map里
给你一个简单的正则
str=str.replaceAll("[~@#$%^&*%!?,|.]+|(I\\sam\\sa)+"," ");
然后String s[]=str.split("\\s+");
[/Quote]
关键是要求用StringTokenizer 剔除
BeFore27 2009-11-02
  • 打赏
  • 举报
回复
新手 还没想通怎么来把txt文件读进度 怎么分析文件里面的单词 每行1个单词 共N行
正在搜
loveofmylife 2009-11-02
  • 打赏
  • 举报
回复
上面写错了点,改一下
用BufferedReader读取一行
再对着一行字符串进行词法分析,用正则剔除非法字符,然后split存到Map里
给你一个简单的正则
str=str.replaceAll("[~@#$%^&*%!?,|.]+|(I\\sam\\sa)+"," ");
然后String s[]=str.split("\\s+");
loveofmylife 2009-11-02
  • 打赏
  • 举报
回复
用BufferedReader读取一行
再对着一行字符串进行词法分析,用正则剔除非法字符,然后split存到Map里
给你一个简单的正则
str=str.replaceAll("[~@#$%^&* %!?,|.]+||(I am a)+"," ");
然后String s[]=str.split("\\s+");
yjfnwcw 2009-11-02
  • 打赏
  • 举报
回复
我想问哈与你题目无关的
那个JAVA CODE 怎么插入进去啊
BeFore27 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hui135 的回复:]
给点思路:
用文件存入限制的字符串。
用IO连接要判断的文件,读出数据,再分割成单个单词,存入map中,再和限制字符串比较,相同的就移除MAP,再用LZ自己写的程序自己比较就可以了

[/Quote]
看样子是这样的 能帮忙改下吗
hui135 2009-11-02
  • 打赏
  • 举报
回复
给点思路:
用文件存入限制的字符串。
用IO连接要判断的文件,读出数据,再分割成单个单词,存入map中,再和限制字符串比较,相同的就移除MAP,再用LZ自己写的程序自己比较就可以了
BeFore27 2009-11-02
  • 打赏
  • 举报
回复
意思是刨除文档里面的单词,而统计到除此之外的单词
BeFore27 2009-11-02
  • 打赏
  • 举报
回复
只能自己顶了
BeFore27 2009-11-02
  • 打赏
  • 举报
回复
不单纯是引用文件啊 怎么处理呢
amon256 2009-11-02
  • 打赏
  • 举报
回复
如果是引用文件,那么可以把文件的路径敲上去
加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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