2015-06-05 2 views
1

Я написал эту небольшую часть здесь, чтобы найти теги по темам электронной почты, извлечь их и сохранить их в свой набор.Java String Parser, чтобы найти строку, сохранить ее и распечатать

I.e. если тема электронной почты «Hello there #bro #senpai», она должна найти и извлечь как «bro», так и «senpai» и поместить его в m_aTags (который является обычным типом Set - this.m_aTags = new HashSet(); я создаю его)

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

    } 

Я пытаюсь напечатать его из набора в этом для цикла, но вместо строк я получить что-то вроде: [email protected]

[email protected]

Я не уверен, почему это показ вместо «брата» и «сэмпая». Я хочу напечатать его и использовать его как строку, я не могу думать ни о чем, что будет делать, поскольку я уже много пробовал.

Я не знаю, что делать, кто может помочь мне :)

ОТВЕТ: мне пришлось переопределить ToString() метод в классе MyTag :)

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

Этот странный вывод вызван тем, что ваш класс 'MyTag' не переопределяет метод' toString() '. – Jesper

+0

Спасибо, я применил его, и он работал как шарм :) –

ответ

1

Когда вы System.out.println(s); вы в основном призывающую s.toString(). Однако, поскольку s относится к типу MyTag и MyTag не реализует toString() на своем собственном, он называет супер.

Каждый объект в Java является производным от Object. Объект toString() печатает эту «тарабарщину», которая в основном является именем объекта и адресом, на котором он расположен.

Если вы хотите, чтобы объект выполнял какую-либо другую печать (например, значение тега), вам нужно переопределить метод самостоятельно. Например:

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

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

Красиво объяснил, спасибо :) –

0

Вы печати объект. Попробуйте переопределить метод toString в вашем классе MyTag и вызвать toString на объекте s при печати объекта

или если у вас есть метод в классе MyTag для получения имени тега, то используйте его. для примера что-то вроде

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

Этот метод getTag() кажется хорошей идеей, даже лучше, чем переопределение для моих дальнейших планов развития. –

+0

Пожалуйста, воздержитесь, если вы сочтете полезным, чтобы другие могли видеть :) – GregH

+0

Мне нужно иметь репутацию 15, чтобы вернуться, как только я получу ее, убедитесь, что я вернусь к вам, чтобы вы могли! » –

0

Похоже, ваш класс MyTag отсутствует реализацию хороший ToString(), как

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

System.out.println (ы) вызывает System.out.println (объект Object), этот метод просто печатает Object.ToString(). Но когда вы вызываете toString() в s, вы на самом деле вызываете Object.toString(). И это, как Object.toString() выглядит следующим образом:

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

Чтобы изменить этот результат, overide ToString() в вашем классе MyTag.

Смежные вопросы