テキスト入力を分析するはずのコードを実行するたびに、次の出力が得られます。単語と英数字の数を数えるために使用される他の方法は機能しますが、5 文字以上の単語を吐き出すと想定される他の方法は機能しません。そのような要素がないと言うエラーが表示され続けます。これは、イテレータがこれ以上要素を見つけることができないことを意味しますが、while ステートメントを使用しているため、発生するべきではありません。
出力は次のとおりです。
テキストを入力 ランニング 単語数: 1 英数字カウント: 7 単語の昇順 ランニング 5文字以上の単語 スレッド「メイン」での例外 java.util.NoSuchElementException java.util.AbstractList$Itr.next (不明なソース) で com.yahoo.chris511026.paragraphcount.ManifoldMethod.wordSort (ManifoldMethod.java:55) で com.yahoo.chris511026.paragraphcount.ParagraphAnalyzer.main (ParagraphAnalyzer.java:15) で
私のコード:
package com.yahoo.chris511026.paragraphcount;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class ManifoldMethod {
static ArrayList<String> stringList = new ArrayList<String>();
public static void wordCount(String data) {
int counter = 0;
for (String str : data.split("[^a-zA-Z-']+")) {
stringList.add(str);
counter++;
}
System.out.println("Word count: " + counter);
}
public static void alphanumericCount(String data) {
data = data.replaceAll("[[^a-z]&&[^A-Z]&&[^0-9]]", "");
System.out.println("Alphanumeric count: " + data.length());
}
public static void wordSort(String data) {
Collections.sort(stringList, new StringComparator());
System.out.println("Words in ascending order ");
for (String s: stringList)
System.out.println(s);
System.out.println("Words with five or more characters ");
int count=0;
Iterator<String> itr=stringList.iterator();
while(itr.hasNext())
if (itr.next().replaceAll("[[^a-z]&&[^A-Z]&&[^0-9]]", "").length ()>=5) {
System.out.println(itr.next());
count++;
}
if (count==0) {
System.out.println("None.");
}
}
}
編集:
私はそれを修正し、String str=itr.next();
ここで使用するのは新しいセクションです。しかし、String
変数を変数に解決できないことがわかりました。なんで?
while(itr.hasNext())
String str=itr.next();
if (str.replaceAll("[[^a-z]&&[^A-Z]&&[^0-9]]", "").length ()>=5) {
System.out.println(str);
count++;
}