我有一个文件将每一行转储到ArrayList中的一个位置,我希望用户能够将列表排序为只有具有一定数量单词的行。我无法弄清楚如何打印剩余的列表(正确编号的条目)。
首先找到列表中的第一个单词,然后迭代CharSequence并检查字符是否等于空格,''如果是,则将nWords增加1,如果nWords不等于userInput (用户输入的数字按字数对列表进行排序),它应该从列表中删除该项目。
ArrayList<CharSequence> str = new ArrayList();
str.add("Hello");
str.add("Hi there");
str.add("toad");
str.add("i see you");
System.out.println("How many words?");
Scanner scan = new Scanner(System.in);
int userInput = scan.nextInt();
for (int loopNumber = 0; loopNumber < str.size(); ) {
int nWords = 1;
for (int i = 0; i < str.get(loopNumber).length(); i++) {
if ( str.get(loopNumber).charAt(i) == ' ') {
nWords++;
if (nWords != userInput) {
str.remove(loopNumber);
}
}
}
loopNumber++;
}
答案 0 :(得分:2)
您无需排序。您需要删除这些行而没有正确的单词数。
对于此任务,Iterator
是首选武器,因为您可以在迭代时调用其remove()
方法:
for (Iterator<String> i = str.iterator(); i.hasNext();) {
if (i.next().split(" +").length != userInput)
i.remove();
}
这就是它的全部内容。
另请注意通过split()
方法计算单词的简洁方法。
答案 1 :(得分:0)
尝试这样的事情.....(比较方法可能不是最有效的方法!)
ArrayList<String> str = new ArrayList<String>();
str.add("Hello");
str.add("Hi there");
str.add("toad");
str.add("i see you");
Comparator<String> stringComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String [] words1 = null;
String [] words2 = null;
try {
words1 = o1.split(" ");
words2 = o2.split(" ");
} catch (Exception e) {
//ignore
}
if (words1 != null && words2 != null) {
if (words1.length > words2.length) {
return 1;
} else if (words1.length == words2.length) {
return 0;
} else {
return -1;
}
} else if (words1 != null) {
return 1;
} else {
return -1;
}
}
};
Collections.sort(str, stringComparator);
答案 2 :(得分:0)
您可以使用Comparator界面。请查看以下示例
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortedList {
public static void main(String[] args) {
ArrayList<SimpleString> strArray = new ArrayList<SimpleString>();
strArray.add(new SimpleString("String"));
strArray.add(new SimpleString("abc"));
strArray.add(new SimpleString("Test String"));
Collections.sort(strArray, new SimpleString(""));
for (SimpleString str : strArray) {
System.out.println(str.getTestString());
}
}
}
class SimpleString implements Comparator<SimpleString> {
String testString;
public SimpleString(String testString) {
this.testString = testString;
}
public String getTestString() {
return testString;
}
public void setTestString(String testString) {
this.testString = testString;
}
@Override
public int compare(SimpleString o1, SimpleString o2) {
// TODO Auto-generated method stub
int strLength = o1.getTestString().length()
- o2.getTestString().length();
return strLength;
}
}
&#13;