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

时间:2019-04-18 16:02:47

标签: 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?

1 个答案:

答案 0 :(得分:2)

您不能按照建议的方式使用String,因为String是不可变的。

另一个替代StringBuilder的方法是使用char的原始数组。您知道结果字符串的长度与源字符串的长度相同,因此您可以这样做:

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

这看起来像是练习,我将实际编码留给您。

注意:以上内容仅适用于Unicode代码点位于基本多语言平面中的字符串(即您和我所用的大多数字符串)。不适用于包含某些字符(例如笑脸)的棘手情况(有关此潜在问题的更多信息,请参见https://dzone.com/articles/the-right-way-to-reverse-a-string-in-java)。