Java 有没有办法在某些特定索引处用字符填充字符串?
有一个字符串“你好,世界!”。除了A-Z和A-Z以外的任何字符都必须保持在同一位置,但字母必须颠倒。因此,输出将是“dlrow olleh!” 我使用字符串生成器来设计解决方案,但我很好奇,是否可以声明长度为12的字符串,并将其字符填入索引5和11,然后用反向字母填充剩余的字符 任何其他技术或想法来执行相同的将不胜感激Java 有没有办法在某些特定索引处用字符填充字符串?,java,string,Java,String,有一个字符串“你好,世界!”。除了A-Z和A-Z以外的任何字符都必须保持在同一位置,但字母必须颠倒。因此,输出将是“dlrow olleh!” 我使用字符串生成器来设计解决方案,但我很好奇,是否可以声明长度为12的字符串,并将其字符填入索引5和11,然后用反向字母填充剩余的字符 任何其他技术或想法来执行相同的将不胜感激 StringBuilder sb = new StringBuilder(); for(int i=S.length()-1; i >=
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);
}
StringBuilder sb=新建StringBuilder();
对于(int i=S.length()-1;i>=0;i--){
字符串c=”“+S.charAt(i);
如果(c.匹配(“[A-Za-z]”){
sb.附加(c);
}
}
对于(int i=0;i
我是这样得到输出的,但是有没有办法在这里使用String而不是StringBuilder?您不能按照您建议的方式使用
String
,因为String
是不可变的
另一个选项,而不是StringBuilder
,是使用char
的原始数组。您知道结果字符串的长度与源字符串的长度相同,因此您可以这样做:
i
和j
从两端同时迭代。从0开始索引i
向前移动,从数组长度-1开始索引j向后移动警告:以上仅适用于Unicode代码点位于基本多语言平面中的字符串(即您和我的大多数字符串)。它不适用于包含特定字符(如smiley)的复杂情况(有关此潜在问题的更多信息,请参阅)。您不能按照建议的方式使用
String
,因为String
是不可变的
另一个选项,而不是StringBuilder
,是使用char
的原始数组。您知道结果字符串的长度与源字符串的长度相同,因此您可以这样做:
i
和j
从两端同时迭代。从0开始索引i
向前移动,从数组长度-1开始索引j向后移动警告:以上仅适用于Unicode代码点位于基本多语言平面中的字符串(即您和我的大多数字符串)。对于包含特定字符(如smileys)的复杂情况,它不起作用(有关此潜在问题的更多信息,请参阅)。是:将字符串转换为字符数组,然后根据需要修改字符数组,然后从此字符数组创建新字符串。不能修改原始字符串:字符串是不可变的。请注意,字符串在Java中是不可变的。如果您“更改”字符串,则您正在创建一个新对象。StringBuilder(或@JBNizet建议的字符数组)将更有效。您必须处理字符数组,如上面的注释所述。但是,StringBuilder只是一个具有附加功能的包装字符[]。是:将字符串转换为字符数组,然后根据需要修改字符数组,然后从此字符数组创建新字符串。不能修改原始字符串:字符串是不可变的。请注意,字符串在Java中是不可变的。如果您“更改”字符串,则您正在创建一个新对象。StringBuilder(或@JBNizet建议的字符数组)将更有效。您必须处理字符数组,如上面的注释所述。但是,StringBuilder只是一个具有附加功能的包装字符[]。感谢您花时间详细回答这个问题。谢谢。感谢您抽出时间详细回答问题。谢谢。