【问题标题】:pattern() vs toString() in Pattern classPattern 类中的 pattern() 与 toString()
【发布时间】: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);
  }
}

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

【问题讨论】:

    标签: java regex pattern-matching


    【解决方案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() 是一样的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-28
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 2018-12-15
      • 1970-01-01
      • 2016-01-19
      相关资源
      最近更新 更多