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

标签 java email parsing set

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

即如果电子邮件主题是“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

我不知道为什么会显示“兄弟”和“前辈”。 我想打印它并将其用作字符串,我想不出会做什么,因为我已经尝试了一些东西。

我不知道该怎么办,有人可以帮助我吗?:)

答案: 我必须重写 MyTag 类中的 toString() 方法:)

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

最佳答案

当你这样做时System.out.println(s);你基本上是在打电话s.toString() 。但是,由于 s 的类型为 MyTagMyTag没有实现toString()它自己调用 super。

Java中的每个对象都派生于 Object 。对象的toString()打印这个“乱码”,它基本上是对象的名称及其所在的地址。

如果您希望对象执行其他类型的打印(例如标记值),您需要自己重写该方法。例如:

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

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

关于Java字符串解析器查找字符串,保存并打印它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30668485/

相关文章:

php - 使用 PHP 将 XML feed 上传到 mysql

java - 将 DTO 转换为实体子类

PHP Mailer 邮件对我向其发送邮件的每个用户重复

email - 使用 AWS EC2 和 SES 时如何创建电子邮件帐户并设置电子邮件接收器?

parsing - 将 BNF 转换为 Parsec 程序有什么技巧吗?

.net - 使用正则表达式分配变量

java - Java 和 SQLite 之间的时间戳差异

java - 为什么exec :java work and exec:exec fail?

java - 我无法从 Java 的较低级别访问 "higher level"变量

java - Spring(Hibernate)更新问题