扭转字符串

时间:2015-07-16 07:18:23

标签: java reverse

我有一个字符串作为Apple-> Ball-> Cat-> Dog并希望将其反转为Dog-> Cat-> Ball-> Apple。可以通过在每个' - >'处拆分字符串来完成然后添加每个元素是一个数组,然后反转数组,然后添加箭头。但有没有更快的方法呢?使用java来反转它的最快方法是什么?

3 个答案:

答案 0 :(得分:5)

不要使用标记化。您可以尝试StringBuffer反向方法:

String input = "A->B->C->D";
input = input.replace("->", "-");
input = new StringBuffer(input).reverse().toString();
input = input.replace("-", "->");
System.out.println(input);

这将保留 - >按正确的顺序:

input: "A->B->C->D"
output: "D->C->B->A"

祝你好运;

<强> [编辑]:

好的,首先你没有提到你的String可能包含非单个字符。所以上面的答案无法满足你的需求。但是如果你的字符串中有唯一的名字,你可以用这种方式用一个字符替换每个名字并且它有效。但我不确定它会比你自己的解决方案更好(Tokenize到一个数组并反转数组)。

答案 1 :(得分:0)

为了更好的性能,请使用此功能。我假设您的A,B,C,D字面上是字符,那么您可以利用字符串中的位置。只需将您的字符串转换为StringBuilder并执行以下操作。

StringBuilder sb = new StringBuilder("A->B->C->D");
int len = sb.length();
for (int i = 0; i < len / 2; i+=3) {
  int j = len - (i + 1);
  char temp = sb.charAt(i);
  sb.setCharAt(i, sb.charAt(j));
  sb.setCharAt(j, temp);
}
System.out.print(sb.toString());

答案 2 :(得分:-1)

如果每个箭头后面只有一个字符,使用replaceAll("->", "")可能会更快,这样你就可以摆脱所有箭头,反转你得到的字符串(如果你没有删除{ {1}}你明显反转箭头,然后在每个角色后添加箭头。据说它可能在性能范围上没有太大变化,并且它不适用于长度超过1个字符的字符串,所以我会坚持原来的计划。