我正在编写一个程序,该程序读取作为main方法的参数传递的文本文件,并从文件中提取所有唯一的单词,并在控制台中每行打印一个。在从扫描仪读取每一行时,我无法将令牌传递给字符串数组:
我发现有些事情是错误的,或者可以用更有效的方式编写:
1)令牌被初始化为100.这是一个明显的约束,我想过使用像arrayList或vector这样的动态数组,但最终决定使用简单的字符串数组并简单地扩展数组(即创建一个新的数组double原始数组的大小,通过编写某种类型的条件语句来确定令牌是否填充了最大元素,但扫描程序仍然有更多行。 2)我不确定是否只是将input.hasNextLine()
作为for循环中的测试语句传递是有意义的。只要输入已达到EOF
3)我希望拆分中的正则表达式能够捕获所有标点符号,空格和数字,我不能100%确定它是否正确写入
4)有问题的行是tokens[index] = token[index]
,我不确定这是否正确。我希望将每行中的标记添加到标记中。
public static void main(String[] arg) throws FileNotFoundException {
File textFile = new File(arg[0]);
String[] tokens = new String[100];
try {
Scanner input = new Scanner(textFile);
for (int index = 0; input.hasNextLine(); index++) {
String[] token = input.nextLine().split("[.,;']+\\d +\\s");
tokens[index] = token[index];
}
for (String token : tokens) {
System.out.println(token);
}
input.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
代码中有几个错误,我将尝试涵盖所有错误:
正则表达式确实特定于令牌之间的内容(标点符号+一位数+空格+其他空格)
public static void main(String[] arg) throws FileNotFoundException {
File textFile = new File(arg[0]);
ArrayList<String> tokens = new ArrayList<String>();
try {
Scanner input = new Scanner(textFile);
while (input.hasNextLine()) {
String[] lineTokens = input.nextLine().split("[,;:\"\\.\\s]+");
for (String token : lineTokens) {
tokens.add(token);
}
}
for (String token : tokens) {
System.out.println(token);
}
input.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
可以改进正则表达式,但这取决于你的数据,所以我无法知道你需要处理的所有情况。