2016-04-18 6 views
3

裏話:は、Javaで文字列のリストで特定の文字を変更

List<String> alphabet; // (contains 26 unique characters as elements, for example 
    // qwertyuiosapdfghjklzcxvbnm) 

List<String> wordsToArrange; // contains words as elements, for example: 

- apple 
- stream 
- posthouse 
- sea 
- seed 

私は私が作ったアルファベットに応じた単語を配置する必要があります。好きなことをマップする

私は前のループのために巨大で、多くのやっていた

が、I got an idea from an answer to a previous question

alphabet(0) --> "a"; 
alphabet(1) --> "b"; 
................. 
alphabet(25) --> "z"; 

だから、言葉は変化するであろう、リンゴはリンゴになる---> kjjsc
その後、私はcollection.sortを使用することができますそして、新しいリストにして、正常に戻って単語を変換する...

for(int i = 0; i < wordsToArrange.size(); i++){ 

List<String> charArray = new ArrayList<String>(Arrays.asList(wordsToArrange.get(i).split(""))); 

int arraySize = wordsToArrange.get(i).length(); 

Collections.replaceAll(charArray, alphabet.get(0), "a"); 
Collections.replaceAll(charArray, alphabet.get(1), "b"); 
Collections.replaceAll(charArray, alphabet.get(2), "c"); 
Collections.replaceAll(charArray, alphabet.get(3), "d"); 
Collections.replaceAll(charArray, alphabet.get(4), "e"); 
Collections.replaceAll(charArray, alphabet.get(5), "f"); 
Collections.replaceAll(charArray, alphabet.get(6), "g"); 
Collections.replaceAll(charArray, alphabet.get(7), "h"); 
Collections.replaceAll(charArray, alphabet.get(8), "i"); 
Collections.replaceAll(charArray, alphabet.get(9), "j"); 
Collections.replaceAll(charArray, alphabet.get(10), "k"); 
Collections.replaceAll(charArray, alphabet.get(11), "l"); 
Collections.replaceAll(charArray, alphabet.get(12), "m"); 
Collections.replaceAll(charArray, alphabet.get(13), "n"); 
Collections.replaceAll(charArray, alphabet.get(14), "o"); 
Collections.replaceAll(charArray, alphabet.get(15), "p"); 
Collections.replaceAll(charArray, alphabet.get(16), "q"); 
Collections.replaceAll(charArray, alphabet.get(17), "r"); 
Collections.replaceAll(charArray, alphabet.get(18), "s"); 
Collections.replaceAll(charArray, alphabet.get(19), "t"); 
Collections.replaceAll(charArray, alphabet.get(20), "u"); 
Collections.replaceAll(charArray, alphabet.get(21), "v"); 
Collections.replaceAll(charArray, alphabet.get(22), "w"); 
Collections.replaceAll(charArray, alphabet.get(23), "x"); 
Collections.replaceAll(charArray, alphabet.get(24), "y"); 
Collections.replaceAll(charArray, alphabet.get(25), "z"); 

StringBuilder listString = new StringBuilder(); 
for (String s : charArray) 
    listString.append(s+""); 
System.out.println(listString);   

これが出力されるように、すべての文字を上書きするようだ:

今日の私の脳は非常に霧がかかっています。私はいくつかの種類の解決方法があるまで、この方法を最後まで押し込むことができますが、これは効率的な方法ではありません。何か案は?

現時点では、リストから単語を取り出し、それをchar配列にして、別の文字を別々に変更してから、新しいchar配列を文字列に戻してから、新しい単語(または新しいリストを作る)。私がすべての言葉を読んだ後、私はリストを持っています。私はそれにcollection.sortを使用し、通常の言葉に戻って変換するが、今正しい順序で。

私の最初の質問: Sorting list of words according to list of characters in Java

+0

"しかし、私はstackoverflowからアイデアを得ました"あなたはその答えへのリンクを追加する必要があります。 –

+1

両方をリンクしました – JavaJuniorSoon2bSenior

答えて

4

問題は、あなたがそれらを交換している文字はまた、あなたが後に置き換えられます文字であるということです。

最も簡単な方法は、シングルパスで文字を変更することです。

public static String encode(String input, String dict) { 
    StringBuilder sb = new StringBuilder(); 
    for (char ch : input.toCharArray()) { 
     int index = dict.indexOf(ch); // look for the character 
     if (index >= 0) 
      sb.append((char) ('a' + index)) // use the matching char instead 
     else 
      sb.append(ch); // otherwise copy untranslated. 
    } 
    return sb.toString(); 
} 
関連する問題