有一个字符串“hello-world!”。除 A-Z 和 a-z 之外的任何字符都必须保持在同一位置,但字母必须颠倒。因此,输出将是“dlrow-olleh!”。
我使用字符串构建器来设计解决方案,但我很好奇是否可以声明长度为 12 的字符串并将其字符填充到索引 5 和 11,然后用反转字母填充剩余部分。
任何其他执行相同操作的技术或想法将不胜感激。
StringBuilder sb = new StringBuilder();
for(int i=S.length()-1; i >= 0; i--) {
String c = ""+S.charAt(i);
if(c.matches("[A-Za-z]")) {
sb.append(c);
}
}
for(int i = 0; i < S.length(); i++) {
String c = ""+S.charAt(i);
if(!c.matches("[A-Za-z]"))
sb.insert(i,c);
}
我通过这种方式得到了输出,但是有什么方法可以在这里使用 String 而不是 StringBuilder 吗?
最佳答案
您不能按照您建议的方式使用String
,因为String
是不可变的。
替代StringBuilder
的另一个选项是使用char
的原始数组。您知道结果字符串将与源字符串具有相同的长度,因此您可以这样做:
- 使用String.toCharArray创建一个数组.
- 使用索引
i
和j
同时从两端进行迭代。索引i
从 0 开始向前移动,j 从数组长度 - 1 开始向后移动。 - 使用 Character.isLetter 检查 i 和 j 处的元素是否有字母。如果不是字母,只需向前 i 或向后 j 跳过即可。
- 交换 i 和 j 处的数组元素。
- 在 i < j 时重复。
- 使用
new String(charArray)
创建新字符串
由于这看起来像一个练习,我将把实际的编码留给您。
警告:以上仅适用于 Unicode 代码点位于基本多语言平面中的字符串(即对你我而言的大多数字符串)。它不适用于包含某些字符(例如笑脸)的棘手情况(有关此潜在问题的更多信息,请参阅 https://dzone.com/articles/the-right-way-to-reverse-a-string-in-java )。
关于java - 有没有办法在某些特定索引处用字符填充字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55749864/