我在这里写了这一小部分,以查找电子邮件主题中的标签,提取它们并将它们保存到我的集合中。
即如果电子邮件主题是“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 的类型为 MyTag
和MyTag
没有实现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/