2012-05-27 7 views
9

Jaka jest różnica między metodą pattern() a metodą toString() w klasie Pattern?wzorzec() kontra toString() w klasie wzorca

Doc mówi:

public String pattern() 

Zwraca wyrażenie regularne, z którego ten wzór został skompilowany.

public String toString() 

Zwraca ciąg znaków reprezentujący tego wzorca. Jest to wyrażenie regularne, z którego skompilowano ten wzorzec.

Nawet ich realizacja zwraca ten sam wynik:

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

widzę żadnej różnicy, więc dlaczego istnieją dwie metody? Czy może czegoś brakuje?

Odpowiedz

12

Ponieważ każda klasa ma metodę toString() odziedziczoną po Object. Metoda toString() ma zwrócić łańcuch, który najlepiej reprezentuje obiekt, jeśli możliwe jest nawet utworzenie pewnego rodzaju reprezentacji ciągów znaków. Nazwa toString() jest dość ogólnikowa, więc dodali metodę pattern(), która jest bardziej prosta.

A ponieważ chcieli, aby toString() zwrócił coś sprytnego, użyli wzoru wyrażenia regularnego, które jest dobrą reprezentacją ciągów dla klasy Pattern.

+0

@martijin: to jest? ... nie wiem dlaczego, ale czuję się oszukany !! thnx w każdym razie !! – WickeD

+0

@ WickeD: Tak, to jest to. :) –

0

toString() Metoda znajduje się w każdej klasie (rozciąga się od klasy Object). Jest taki przykład. System.out.print(Object o); można wydrukować niektóre informacje o Object. W rzeczywistości będzie to samo: System.out.print(o.toString()). Masz prosty sposób, aby zobaczyć, jaki obiekt posiadasz. Wypróbuj:

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

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

Jak widać, możesz zobaczyć informacje o tym obiekcie, nawet jeśli nie wiesz, że w ogóle jest to przycisk.

także String jest Object więc nie jest dziwne jeden przykład:

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

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

To unuseful, ale all classes have this method. Więc "mój ciąg" i "mój ciąg" .toString() jest taki sam