【问题标题】:Character swapping字符交换
【发布时间】:2013-08-27 13:21:36
【问题描述】:

我正在尝试交换字符串中的第一个和最后一个字符,所以我能够检索它的第一个和最后一个字符,但现在很难将它们全部放在一起:

   String name="pera";
   char[] c = name.toCharArray();
   char first = c[0];
   char last = c[c.length-1];
   name.replace(first, last);
   name.replace(last, first);
   System.out.println(name);  

虽然我为变量“first”获取“p”的值,为变量“last”获取“a”的值,但这些方法 replace() 没有出现有效结果,因为名称保持不变照原样。有人知道如何完成这个吗?

【问题讨论】:

  • 字符串是不可变的,因此您必须获得对replace 方法返回的String 的引用。

标签: java string replace char


【解决方案1】:

1) 字符串在 Java 中是不可变的。所以name.replace(first, last) 不会修改name 但会返回一个新的字符串。

2) String#replace(char oldChar, char newChar) 用 newChar 替换此字符串中所有出现的 oldChar。

例如:

System.out.println("aaaddd".replace("a","d"));

会给:

dddddd

可能的解决方案:如果您将String 转换为char[],则可以轻松交换字符:

public static String inverseFirstAndLast(String str){
  char[] c = str.toCharArray();
  Character temp = c[0];
  c[0] = c[c.length-1];
  c[c.length-1]=temp;
  return new String(c);
}

【讨论】:

  • 我仍然说未分配给某物的非 void 函数应该引发编译错误。
  • @sanbhat 我正在准备一个更完整的答案,因为 OP 的第二个错误name.replace 将替换字符串中first所有 次出现。
  • @sanbhat 这应该足以让他朝着正确的方向前进。但是他会遇到 name.replace(first, last); 的问题。 name.replace(last, first);
【解决方案2】:

将第一个与最后一个交换很容易,如下所示:

String str = "SwapDemo";
String swapped = str.charAt(str.length() - 1) + str.substring(1, str.length() - 1) + str.charAt(0);

您尝试的方法将替换 all 所传递参数的出现,这不是您想要的。上面的代码会做你想做的。

正如 Arnoud 指出的,字符串是不可变的。但是,解决这个问题,您仍然会得到错误的结果:

acbbc

例如

【讨论】:

  • 谢谢您,先生,这是迄今为止最简单、最舒适的方式。
【解决方案3】:
 c[0] = last;
 c[c.length-1] = first;
 System.out.println(new String(c));

【讨论】:

    【解决方案4】:

    这是一个基于正则表达式的解决方案:

    String str = "demo";
    String swapped = str.replaceAll("^(.)(.*)(.)$", "$3$2$1");
    

    【讨论】:

      【解决方案5】:

      与@Martijn Courteaux 的解决方案有关。您还可以将结果存储在相同的 str String 中,从而节省一点空间,如下所示:

      String str = "pera";
      String str = str.charAt(str.length() - 1) + str.substring(1, str.length() - 1) + str.charAt(0);
      

      【讨论】:

        猜你喜欢
        • 2014-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        相关资源
        最近更新 更多