我正在尝试交换字符串中的第一个和最后一个字符,所以我所做的是我能够检索它的第一个和最后一个字符,但我现在很难将它们放在一起:
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()没有出现有效的结果,因为名称保持不变原样。有没有人知道如何完成这个?
答案 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);