字符串反转

Reversing of string

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

不使用标记化。您可以尝试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"

祝你好运;

[编辑]:

好的,起初您没有提到您的字符串可能包含单个字符以外的字符。所以上面的答案不能维持你的需求。但是如果你的字符串中有唯一的名字,你可以通过用一个字符替换每个名字来使用这种方式并且它有效。但我不确定它会比您自己的解决方案更好(标记为数组并反转数组)。

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

为了获得更好的性能,请使用它。我假设您的 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());