java - 有没有办法在某些特定索引处用字符填充字符串?

标签 java string

有一个字符串“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的原始数组。您知道结果字符串将与源字符串具有相同的长度,因此您可以这样做:

  1. 使用String.toCharArray创建一个数组.
  2. 使用索引 ij 同时从两端进行迭代。索引 i 从 0 开始向前移动,j 从数组长度 - 1 开始向后移动。
  3. 使用 Character.isLetter 检查 i 和 j 处的元素是否有字母。如果不是字母,只需向前 i 或向后 j 跳过即可。
  4. 交换 i 和 j 处的数组元素。
  5. 在 i < j 时重复。
  6. 使用 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/

相关文章:

java - Java中转到文件行号

c++ - 如何将字符串(包含双最大值)转换为 double

python - 如何验证字符串是否是有效的 float ?

c - 读取标记误读简单字符串 - c

java - 使用 Java API 格式化 JavaScript

java - 使用构造函数mockito模拟对象

java - 拆箱问题

java - 如何控制 Action 监听器的焦点监听器?

java - JFreeChart PolarPlot : mathematical orientation

javascript - 如何在 JSP 中转义 JavaScript?