4

すべての行を ArrayList 内の位置にダンプするファイルがあり、ユーザーがリストを並べ替えて、特定の数の単語を含む行のみを表示できるようにしたいと考えています。(正しい番号付きエントリの)残りのリストを印刷する方法がわかりません。

リスト内の最初の単語を見つけることから開始し、CharSequence を反復処理して、文字がスペースと等しいかどうかを確認します。ユーザーがリストを単語数でソートするように入力した場合)、その項目をリストから削除する必要があります。

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++;
}
4

3 に答える 3

0

このようなことを試してみてください ..... (compare メソッドは最も効率的なものではないかもしれません!)

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);
于 2014-12-15T03:46:52.843 に答える
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;
	}
}

于 2014-12-15T04:07:00.910 に答える