有一个字符串“ 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?
答案 0 :(得分:2)
您不能按照建议的方式使用String
,因为String
是不可变的。
另一个替代StringBuilder
的方法是使用char
的原始数组。您知道结果字符串的长度与源字符串的长度相同,因此您可以这样做:
i
和j
从两端同时进行迭代。从0开始向前索引i
,从数组长度j开始向后索引j-1,向后移动。new String(charArray)
这看起来像是练习,我将实际编码留给您。
注意:以上内容仅适用于Unicode代码点位于基本多语言平面中的字符串(即您和我所用的大多数字符串)。不适用于包含某些字符(例如笑脸)的棘手情况(有关此潜在问题的更多信息,请参见https://dzone.com/articles/the-right-way-to-reverse-a-string-in-java)。