从 java 中的文本文档填充两个数组
Filling two arrays from text document in java
我想从文本文档中获取单词,然后在字符串数组中搜索它。如果这个词存在,那么我会在另一个整数数组中增加它的值,如果不存在,我会把它添加到字符串数组中,并在整数数组中增加它的值。
在代码的末尾,我必须有两个数组。一个包含该文档单词的字符串和包含每个单词在使用的文档中重复多少次的整数数组。
但是我的代码给了我一个空指针异常。为什么?
try{
FileReader reader = new FileReader("C:\Users\name\Desktop\IRP\finalstemmer\Algorithm.stp");
FileReader reader2 = new FileReader("C:\Users\name\Desktop\IRP\finalstemmer\Algorithm.stp");
BufferedReader bufferedReader = new BufferedReader(reader);
BufferedReader bufferedReader2 = new BufferedReader(reader2);
String word ,word2 , newWord;
int n =0;
while ((word = bufferedReader.readLine()) != null) {
n++;}
System.out.println(n);
String [] anArray = new String[n];
int [] count = new int[n];
while ((word2 = bufferedReader2.readLine()) != null) {
for (int k = 0; k < word2.split(" ").length; k++) {
newWord = word2.split(" ")[k];
int i = 0;
while(!anArray[i].equalsIgnoreCase(newWord)){
if(anArray[i].equals(null))
break;
i++;
}
if(anArray[i].equals(null)){
anArray[i]=newWord;
count[i]++;
}else
if(anArray[i].equals(newWord)){
count[i]++;
}
}
}
System.out.println(Arrays.toString(anArray));
System.out.println(Arrays.toString(count));
}catch (Exception e) {
System.out.println(e);
} // TODO code applicat
有人可以帮忙吗?
您应该使用 ==
检查对象是否为 null。
所以if(yourObject == null)
是正确的方法。
第二件事是字符串应该像这样拆分:
word2.split("\s+").length
您可以非常有效地使用 HashSet 来做到这一点。
如果您可以成功添加单词,则该单词在 HashSet 中不存在。 HashSet 包含唯一元素。并据此增加你的计数器数组,它应该包含单词 wise counter
这里是解释基本策略的示例代码
public static void main(String[] args)
{
String sal[]={"val","sa","de","dal","val","sa","de"}; // just an example array of word
HashSet<String> ss = new HashSet(Arrays.asList(sal)); // any Hash set containing String Element
System.out.println("HashSet-");
System.out.println(ss);
if(ss.add("vald")){ // word does not exists
System.out.println("Not exist");
// Do your code here
}else{
//word exist just increase the array couter
}
}
o/p:
HashSet-
[de, val, sa, dal]
Not exist
我想从文本文档中获取单词,然后在字符串数组中搜索它。如果这个词存在,那么我会在另一个整数数组中增加它的值,如果不存在,我会把它添加到字符串数组中,并在整数数组中增加它的值。
在代码的末尾,我必须有两个数组。一个包含该文档单词的字符串和包含每个单词在使用的文档中重复多少次的整数数组。
但是我的代码给了我一个空指针异常。为什么?
try{
FileReader reader = new FileReader("C:\Users\name\Desktop\IRP\finalstemmer\Algorithm.stp");
FileReader reader2 = new FileReader("C:\Users\name\Desktop\IRP\finalstemmer\Algorithm.stp");
BufferedReader bufferedReader = new BufferedReader(reader);
BufferedReader bufferedReader2 = new BufferedReader(reader2);
String word ,word2 , newWord;
int n =0;
while ((word = bufferedReader.readLine()) != null) {
n++;}
System.out.println(n);
String [] anArray = new String[n];
int [] count = new int[n];
while ((word2 = bufferedReader2.readLine()) != null) {
for (int k = 0; k < word2.split(" ").length; k++) {
newWord = word2.split(" ")[k];
int i = 0;
while(!anArray[i].equalsIgnoreCase(newWord)){
if(anArray[i].equals(null))
break;
i++;
}
if(anArray[i].equals(null)){
anArray[i]=newWord;
count[i]++;
}else
if(anArray[i].equals(newWord)){
count[i]++;
}
}
}
System.out.println(Arrays.toString(anArray));
System.out.println(Arrays.toString(count));
}catch (Exception e) {
System.out.println(e);
} // TODO code applicat
有人可以帮忙吗?
您应该使用 ==
检查对象是否为 null。
所以if(yourObject == null)
是正确的方法。
第二件事是字符串应该像这样拆分:
word2.split("\s+").length
您可以非常有效地使用 HashSet 来做到这一点。 如果您可以成功添加单词,则该单词在 HashSet 中不存在。 HashSet 包含唯一元素。并据此增加你的计数器数组,它应该包含单词 wise counter
这里是解释基本策略的示例代码
public static void main(String[] args)
{
String sal[]={"val","sa","de","dal","val","sa","de"}; // just an example array of word
HashSet<String> ss = new HashSet(Arrays.asList(sal)); // any Hash set containing String Element
System.out.println("HashSet-");
System.out.println(ss);
if(ss.add("vald")){ // word does not exists
System.out.println("Not exist");
// Do your code here
}else{
//word exist just increase the array couter
}
}
o/p:
HashSet-
[de, val, sa, dal]
Not exist