拆分命令后打印出的单词不按升序打印。我不认为我把它放在代码的正确位置,但我不确定是否放置它。它根据需要逐字打印整个文本段落,但不会按升序(字母)顺序打印。任何帮助都会很棒。
public static void main(String[] args) throws
FileNotFoundException, IOException
{
Scanner ci = new Scanner(System.in);
System.out.print("Please enter a text file to open: ");
String filename = ci.next();
System.out.println("");
File file = new File(filename);
BufferedReader br = new BufferedReader(new FileReader(file));
StringBuilder sb = new StringBuilder();
String str;
while((str = br.readLine())!= null)
{
String sp[] = str.split("[\\s\\.,;:\\?!]+");
for (String sr : sp )
{
System.out.println(sr);
}
sb.append(str);
sb.append(" ");
// System.out.println(str);
}
ArrayList<String> text = new ArrayList<>();
StringTokenizer st = new StringTokenizer(sb.toString().toLowerCase());
while(st.hasMoreTokens())
{
String s = st.nextToken();
text.add(s);
}
System.out.println("\n" + "Words Printed out in Ascending "
+ "(alphabetical) order: " + "\n");
List<String> arrayList = new ArrayList<>(text);
Collections.sort(arrayList);
for (Object ob : arrayList)
{
System.out.println("\t" + ob.toString());
}
}
答案 0 :(得分:0)
你打印两次单词,一旦你在标点符号上分割了文本,然后再将它粘合在一起,再将它分开并最终对其进行分类。
但是,在行读取while
中你要分割每一行,但是你忽略了该分割的结果(除了打印它)并继续将原始行添加到{{1 }}
您可能希望将sb
变为sb
,然后将ArrayList
循环中sr
的每个字sp
添加到{{1}然后排序。
然后,您可以使用for(sr : sp)
删除整个部分,并立即对sb
进行排序。像这样:
StringTokenizer