Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在某些特定索引处用字符填充字符串?_Java_String - Fatal编程技术网

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

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 >=

有一个字符串“你好,世界!”。除了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);
        }
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向后移动
  • 检查i和j处的元素是否有字母。如果它不是一个字母,只需向前推进i或向后推进j就可以跳过它
  • 交换i和j处的数组元素
  • 当i
  • 使用创建新字符串
  • 由于这看起来像一个练习,我将把实际的编码留给您


    警告:以上仅适用于Unicode代码点位于基本多语言平面中的字符串(即您和我的大多数字符串)。它不适用于包含特定字符(如smiley)的复杂情况(有关此潜在问题的更多信息,请参阅)。

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

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

  • 使用创建一个数组
  • 使用索引
    i
    j
    从两端同时迭代。从0开始索引
    i
    向前移动,从数组长度-1开始索引j向后移动
  • 检查i和j处的元素是否有字母。如果它不是一个字母,只需向前推进i或向后推进j就可以跳过它
  • 交换i和j处的数组元素
  • 当i
  • 使用创建新字符串
  • 由于这看起来像一个练习,我将把实际的编码留给您


    警告:以上仅适用于Unicode代码点位于基本多语言平面中的字符串(即您和我的大多数字符串)。对于包含特定字符(如smileys)的复杂情况,它不起作用(有关此潜在问题的更多信息,请参阅)。

    是:将字符串转换为字符数组,然后根据需要修改字符数组,然后从此字符数组创建新字符串。不能修改原始字符串:字符串是不可变的。请注意,字符串在Java中是不可变的。如果您“更改”字符串,则您正在创建一个新对象。StringBuilder(或@JBNizet建议的字符数组)将更有效。您必须处理字符数组,如上面的注释所述。但是,StringBuilder只是一个具有附加功能的包装字符[]。是:将字符串转换为字符数组,然后根据需要修改字符数组,然后从此字符数组创建新字符串。不能修改原始字符串:字符串是不可变的。请注意,字符串在Java中是不可变的。如果您“更改”字符串,则您正在创建一个新对象。StringBuilder(或@JBNizet建议的字符数组)将更有效。您必须处理字符数组,如上面的注释所述。但是,StringBuilder只是一个具有附加功能的包装字符[]。感谢您花时间详细回答这个问题。谢谢。感谢您抽出时间详细回答问题。谢谢。