我正在为字符串编写一种单词扰频器的形式,它接受除第一个和最后一个字母之外的所有字母,并旋转它们的位置。但是,我应该只看倒数第二的字母。我应该如何只从倒数第二个字母到倒数第二个字母?
例如,将"字符串"加扰为"srintg">
我可以在通过拆分字符串创建的字符数组上调用 Collections.rotate(),但这会使整个单词打乱。
List<String> newWordList = Arrays.asList(word.split(" "));
Collections.rotate(newWordList, -1);
String newWord = String.join("", newWordList);
我想获得输出"srintg",但相反,我会得到"rintgs"。
如果你的单词足够长,以至于它很合理(至少四个字母),你可以通过旋转列表的子列表来使你呈现的方法起作用:
Collections.rotate(newWordList.subList(1, newWordList.size() - 1), -1);
List.subList()
创建List
列表的一部分的视图,其确切目的是避免使用对元素的索引子范围进行操作的版本重载List
方法。 这是写得快的意义上的"快",而且相当清楚。
但是,如果您正在寻找性能意义上的"快速",那么拆分和连接字符串似乎是不明智的。 Fastest可能不是我们可以提供的,因为性能需要测试,但如果我正在寻找最佳性能,那么我至少会测试这些通用方法:
- 使用单词的数组形式
- 使用
String.toCharArray()
以数组形式获取单词的字母。 - 使用索引
for
循环旋转数组中的字符。 - 从修改后的数组构造新
String
(使用适当的构造函数)。
- 使用
- 使用
StringBuilder
组合单词- 创建初始容量等于字长的
StringBuilder
。 - 使用
CharacterIterator
遍历单词的字母,按所需的顺序将它们附加到构建器中。 这可以通过一次通过完成。 - 从生成器获取结果字符串。
- 创建初始容量等于字长的