2012-05-27 15 views
9

Pattern類中的pattern()方法與toString()方法之間的區別是什麼?模式類中的pattern()vs 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); 
    } 
} 

我看不出有什麼區別,所以爲什麼有兩種方法?或者我錯過了什麼?

回答

12

因爲每個班級都有從Object繼承的toString()方法。如果甚至可以創建某種字符串表示形式,toString()方法應該返回一個代表該對象的字符串的最佳方式。 名稱toString()非常含糊,因此他們添加了一個更直接的方法pattern()

而且因爲他們想要toString()巧妙地返回一些東西,所以他們使用了正則表達式的模式,這是Pattern類的良好字符串表示形式。

+0

@martijin:那它呢? ...我不是爲什麼,但我覺得被騙了!無論如何thnx! – WickeD

+0

@WickeD:是的,就是這樣。 :) –

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()是一樣的