当前位置: 首页 > 知识库问答 >
问题:

更改Java字符串列表中的特定字符

司马同
2023-03-14

背景故事:

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

我需要根据我制作的字母表来排列单词。

我之前做了大量的循环,但我从之前问题的答案中得到了一个想法,可以像这样映射它:

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

所以词会变,苹果会变成苹果---

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);         

这似乎覆盖了所有字符,因此输出为:

rqqsw
sezwrz
qisepiosw
swr
swwz

我的大脑今天很模糊,我想我可以一直坚持到最后,直到找到某种解决方案,但这似乎不是一种有效的方法。有什么想法吗?

此时,我从列表中提取一个单词,将其放入一个字符数组中,这样我就可以分别更改每个字符,然后将新的字符数组放回字符串,然后我将用一个新单词替换列表中的单词(或创建一个新列表)。看完所有单词后,我会有一个列表。我会使用集合。对其排序,然后转换回正常单词,但现在按正确的顺序。

我的第一个问题:根据Java中的字符列表对单词列表进行排序

共有1个答案

弘焕
2023-03-14

问题是,要替换的字符也是稍后要替换的字符。

最简单的方法是在一次传递中更改字符。

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();
}
 类似资料:
  • 问题内容: 例如,我正在从文本文件中提取文本String,我需要这些词来形成数组。但是,当我执行所有这些操作时,有些单词以逗号(,)或句号(。)结尾,甚至附有括号(这完全是正常现象)。 我要做的是摆脱那些角色。我一直在尝试使用Java中的预定义String方法来做到这一点,但我还是无法解决。 问题答案: 用: replaceAll采用正则表达式。这个: …寻找每个逗号和/或句号。

  • 问题内容: 与该方法等效的 JavaScript 是什么: C#仅在字符串的 开头 和 结尾 处修剪所选字符! 问题答案: 一行就足够了: 在功能上:

  • 我有一个endpoint,其响应如下: 状态的可能值如下:活动、非活动、已删除。要检查架构,我尝试了以下操作: 为了验证,我使用以下句子:然后匹配 但它不起作用。这就是错误所在 实际值:“活动”,应为:[“已删除”、“活动”、“非活动”],原因:实际值与列表中的值不同 你能帮帮我吗?

  • 我有一个字符串: 我想从中提取,即从右边的最后一个或第一个之后的子字符串。 有人能提供一些帮助吗?

  • 我已经尝试遍历字符串并手动替换它们,但计数是关闭的。我也尝试过使用列表、数组、stringbuilder等,但我无法使其工作: 我觉得必须有一种简单的方法来用子字符串替换字符串中的单个字符,而不必进行所有这些迭代。我说错了吗?