根据单词数对字符串列表进行排序

时间:2014-12-15 03:31:43

标签: java sorting charsequence

我有一个文件将每一行转储到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++;
}

3 个答案:

答案 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界面。请查看以下示例

&#13;
&#13;
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;
&#13;
&#13;