Java 字符串解析器查找字符串,保存并打印

Java String Parser to find string, save it and print it

我在这里写下这个小部分是为了在电子邮件主题中找到标签,提取它们并将它们保存到我的集合中。

即如果电子邮件主题是 "Hello there #bro #senpai" 它应该找到并提取 'bro' 和 'senpai' 并将其放入 m_aTags (这只是自定义类型 Set - this.m_aTags = new HashSet(); - 这就是我创建它的方式)

在 m_aTags 中,我将所有新标签作为 MyTag 对象。

public ADOTag(String sTagName){
  this.sTagName = sTagName;
}

这是非常简单的构造函数。

private void parseSubject(String sSubject) {

        Pattern aPattern = Pattern.compile("#(\w+|\W+)");
//this patter checks for '#anyword'
        Matcher aMatcher = aPattern.matcher(sSubject);

        this.m_sSubject = sSubject;

        while (aMatcher.find()) {
            String sTagPart = aMatcher.group();
            this.m_aTags.add(new MyTag(sTagPart));
                }
        for (MyTag s : m_aTags) {
            System.out.println(s);
        }

    }

我尝试在这个 for 循环中从 Set 打印它,但我得到的不是字符串而是类似的东西:com.xxx_ee.e_mail.MyTag@72433225

com.xxx_ee.e_mail.MyTag@12312325

我不确定为什么显示的不是 "bro" 和 "senpai"。 我想打印它并将其用作字符串,我想不出有什么办法,因为我已经尝试了一些东西。

我不知道该怎么做,谁能帮帮我?:)

答案: 我不得不重写 MyTag class 中的 toString() 方法 :)

@Override
public String toString() {
    return String.format(sTagName);
}

您正在打印对象。尝试覆盖 MyTag class 中的 toString 方法,并在打印对象时调用 Object 上的 toString

或者如果您在 MyTag class 中有一个方法来获取 tagName 然后使用它。例如

System.out.println(s.getTag());

您的 class MyTag 似乎缺少一个很好的 toString() 实现,例如

@Override
public String toString() {
    return sTagName;
}

当您执行 System.out.println(s); 时,您基本上是在调用 s.toString()。但是,由于 s 是 MyTag 类型,而 MyTag 本身没有实现 toString(),因此它调用了 super.

Java 中的每个对象都派生自 Object。对象的 toString() 打印此 "gibberish" ,它基本上是对象的名称及其所在的地址。

如果你想让对象做一些其他类型的打印(比如标签值),你需要自己重写这个方法。例如:

public MyTag(String sTagName){
  this.sTagName = sTagName;
}

@Override
public String toString() {
   return this.sTagName;
}

System.out.println(s)调用System.out.println(Object object),这个方法只是打印object.toString()。但是当你对s调用toString()时,实际上是在调用Object.toString()。这就是 Object.toString() 的样子:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

要更改此结果,请覆盖 class MyTag 中的 toString()。