4

我看到一个反转字符串的程序

public class ReverseName{
    public static void main(String[]args)
    {
        String name=args[0];
        String reverse=new StringBuffer(name).reverse().toString();
        System.out.println(reverse);
    }
}

那么到底是 怎么回事new StringBuffer(name).reverse().toString();

4

5 回答 5

4
String reverse=new StringBuffer(name).reverse().toString();

让我们分解一下。

new StringBuffer(name)

首先,我们创建一个新的StringBuffer(我会使用 StringBuilder,因为我们不需要线程安全),其内容为name. 这只是允许一种更高效的方式来附加字符串,但在这里它用于下一部分。

.reverse()

这将调用 StringBuffer 上的 reverse 方法,该方法返回一个反转的 StringBuffer。

.toString();

最后,这又变成了一个字符串。

于 2012-04-04T12:01:37.527 回答
2

您可以将其拆分为 3 行以进行理解

StringBuffer reverseBuffer = new StringBuffer(name); // Creating new StringBuffer object
reverseBuffer  = reverseBuffer.reverse(); //Reversing the content using StringBuffer
String reverse = reverseBuffer.toString(); // Converting StringBuffer to String and saving in reverse 
于 2012-04-04T12:01:50.527 回答
1

只是一个反转字符串的 StringBuffer 对象

您使用“名称” String object 实例化 StringBuffer 对象,然后将其反转。

于 2012-04-04T11:58:55.507 回答
1

来自 JAVA API

公共字符串缓冲区反向()

导致此字符序列被相反的序列替换。如果序列中包含任何代理对,则将它们视为单个字符以进行反向操作。因此,高低代理的顺序永远不会颠倒。设 n 是在执行 reverse 方法之前这个字符序列的字符长度(不是 char 值的长度)。那么新字符序列中索引 k 处的字符等于旧字符序列中索引 nk-1 处的字符。

请注意,反向操作可能会导致在操作之前生成未配对的低代理和高代理的代理对。例如,反转“\uDC00\uD800”会产生“\uD800\uDC00”,这是一个有效的代理对。

返回: 对此对象的引用。自:JDK1.0.2

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuffer.html#reverse%28%29

于 2012-04-04T11:59:38.760 回答
0

实际上 String 是一个不可变的类,这意味着一旦 String 的对象被创建,它的内容就不能被修改。因此我们使用 StringBuffer 来构造字符串。在上面的示例中,StringBuffer 的对象是使用内容名称创建的,名称中的字符串在 StringBuffer 的同一对象中反转(因为它是可变的)。再次转换为 String 对象并将该对象分配给反向对象引用。

于 2012-04-04T12:18:07.003 回答