Pattern类中的pattern()vs toString()

时间:2012-05-27 11:09:51

标签: java regex pattern-matching

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

医生说:

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);
  }
}

我认为没有区别,为什么有两种方法?或者我错过了什么?

2 个答案:

答案 0 :(得分:12)

因为每个类都有一个继承自toString()的{​​{1}}方法。如果甚至可以创建某种字符串表示,则Object方法应该返回一个字符串,该字符串以最佳方式表示对象。 名称toString()非常模糊,因此他们添加了一个更简单的方法toString()

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

答案 1 :(得分:0)

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()是相同的