Pattern 类中的 pattern() 与 toString()

Posted

技术标签:

【中文标题】Pattern 类中的 pattern() 与 toString()【英文标题】:pattern() vs toString() in Pattern class 【发布时间】:2012-06-02 03:54:48 【问题描述】:

pattern() 方法和Pattern 类中的toString() 方法有什么区别?

文档说:

public String pattern()

返回编译此模式的正则表达式。

public String toString()

返回此模式的字符串表示形式。这是编译此模式的正则表达式。

即使他们的实现返回相同的结果:

import java.util.regex.*;

class Test 
  public static void main(String[] args) 
    Pattern p = Pattern.compile("[a-zA-Z]+\\.?");
    String s = p.pattern();
    String d = p.toString();
    System.out.println(s);
    System.out.println(d);
  

我看不出有什么区别,那为什么有两种方法呢?还是我错过了什么?

【问题讨论】:

【参考方案1】:

因为每个类都有一个从Object 继承的toString() 方法。 toString() 方法应该返回一个字符串,它以最好的方式表示对象,如果它甚至可以创建某种字符串表示。 toString() 这个名字很模糊,所以他们添加了一个方法pattern() 更直接。

因为他们希望 toString() 返回一些聪明的东西,所以他们使用了正则表达式的模式,这是 Pattern 类的一个很好的字符串表示形式。

【讨论】:

@martijin:就这样?? ...我不知道为什么,但我觉得被骗了!!无论如何,谢谢!【参考方案2】:

toString() 方法在每个类中(从类Object 扩展)。有一个例子。 System.out.print(Object o); 可以打印一些关于Object 的信息。实际上这将是相同的:System.out.print(o.toString())。所以你有简单的方法来查看你有什么对象。试试:

Object someUnknownObject = new JButton();
System.out.println(someUnknownObject);

// output
javax.swing.JButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5...

如您所见,您可以看到有关此对象的信息,即使您根本不知道这是一个按钮。

还有StringObject 所以有一个奇怪的例子:

String str = "hello";
String toStr = str.toString();

System.out.println(str.toString().toString().toString()...);

这没什么用,但是all classes have this method。所以“我的字符串”和“我的字符串”.toString() 是一样的

【讨论】:

以上是关于Pattern 类中的 pattern() 与 toString()的主要内容,如果未能解决你的问题,请参考以下文章

Factory Pattern用于实例化Factory类中的类

一个java小问题,Pattern类中的类方法(静态方法)compile(String regex

Template pattern模板方法模式

[Algorithm] Pattern Matching

Java Pattern的用法是啥

java中关于Pattern的一个方法