
下面的是写的一段测试代码,结果如图:
至于你要的前N个词汇出现频率最高的,就不帮你写了,提示可以使用 List<String,int>去计算。
import java.util.ArrayListimport java.util.List
public class Test {
String content = "虽然/c 宝洁/nz 的/ude1 整体/n业务/n发展/vn"
+ " 状况/n 仍/d为/v 增长/vn,/wd 但/c 在/p 一些/mq领域/n "
+ "受到/v 强大/a的 / ude1 竞争/vn 压力/n 影响/vn 。/wj比如/v"
+ " 在禅链/p 传统/n的早升/ ude1 洗/v 发/v 水/n、/wn 洗衣粉/n、/wn "
+ "护理/vn 用品/n等/ udeng日常/b护理/vn领域/n,/wd宝洁/nz" +
" 在/p 全球/n 范"
public void start() {
String newContent=content.replaceAll("[\\s]","")//去陆袭老掉空格
String[] words = newContent.split("[\\/]")// 分割出带字母的词汇
List<String>list = new ArrayList<String>()
for (int i = 0i <words.lengthi++) {
char[] bytes = words[i].toCharArray()
String xx = ""
for (int j = 0j <bytes.lengthj++) {
String bt = bytes[j] + ""
if (!bt.matches("[a-zA-Z]") &&!bt.matches("[0-9]")
&&!bt.matches("[,。?、]")) {
xx += bt
}
}
list.add(xx)// 得到所有中文词汇
}
for (int i = 0i <list.size()i++) {
String w = list.get(i).toString()
if (!"".contains(w)) {
int count = 0
for (int j = 0j <list.size()j++) {
if (w.equals(list.get(j))) {
count++
}
}
System.out.println("词汇《" + w + "》出现了 " + count + "次 !")
}
}
}
public static void main(String args[]) {
new Test().start()
}
}
现可以提供两种思路:1.String或是StringBuffer(建议用) 中的indexOf("中华")方法,查找给定的的字符串中是否有给定词表历旅中的词。
2.借鉴编译原理中的状态装换的思想。
先编写一个状态机,用于测试给定字符串中的词是否满足词表中的内容。
写在最后:1)建议使用第一种方法,因为在java 内部实现的查找 *** 作其实 和你想得思路是相同的,不过他的效率会高些。
2)如果个人的编程能力比较强或是不陆烂冲考虑效率只是想实现专有的分词算法。可以使用早歼第二种方法。
3)以上的两种方法都可以使用多线程来提高程序的效率。
import java.io.BufferedReaderimport java.io.IOException
import java.io.InputStreamReader
public class Danci {
public static void main(String[] args){
String str = new String()
System.out.print("请输入一个英文句子:")
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))//获取键盘输入
str = br.readLine()
}catch(IOException e){
e.printStackTrace()
}
String []s = str.split(" ")//转换成数组
System.out.println("你输入的句子共有腊橘枣单词 "+s.length+" 个"轮拆)//s.length获取数组长度
}
}
//此程序只能获取一句话的单词个伍粗数.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)