字符交换

时间:2013-08-27 13:21:37

标签: java string replace char

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

   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()没有出现有效的结果,因为名称保持不变原样。有没有人知道如何完成这个?

5 个答案:

答案 0 :(得分:7)

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);
}

答案 1 :(得分:1)

将第一个与最后一个交换很容易就像这样:

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

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

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

acbbc

例如

答案 2 :(得分:1)

 c[0] = last;
 c[c.length-1] = first;
 System.out.println(new String(c));

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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