0

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

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

4

5 回答 5

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为 a 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);
}
于 2013-08-27T13:24:42.173 回答
1

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

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

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

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

acbbc

例如

于 2013-08-27T13:24:38.977 回答
1
 c[0] = last;
 c[c.length-1] = first;
 System.out.println(new String(c));
于 2013-08-27T13:32:53.060 回答
0

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

String str = "demo";
String swapped = str.replaceAll("^(.)(.*)(.)$", "$3$2$1");
于 2013-08-27T13:30:40.977 回答
0

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

String str = "pera";
String str = str.charAt(str.length() - 1) + str.substring(1, str.length() - 1) + str.charAt(0);
于 2013-08-28T15:09:31.827 回答