tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von xeEEenon
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
8257
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von xeEEenon
    xeEEenon xeEEenon ist offline Mitglied Silber
    Registriert seit
    Mar 2004
    Ort
    Deutschland, Bayern, ... :)
    Beiträge
    87
    Hi,

    ich habe eine Liste von Wörtern und eine Suchfunktion der ich den gewünschten Suchbegriff übergebe.
    Ich habe mir gedacht dass ich die Wörter mit einer Regular Expression prüfe und dann seperat speichere.

    Beispiel: in der Liste ist das Wort "regular expression" und meiner Suchbegriff lautet "reg", wie bekomme ich dann alle Wörter die "reg" enthalten?

    Gruß

    Xen
     

  2. #2
    Avatar von teppi
    teppi teppi ist offline Mitglied Platin
    Registriert seit
    May 2004
    Ort
    Berlin
    Beiträge
    537
    Ich würde mal sagen, alle Zeichenketten die folgendes Muster besitzen:

    1: " " (Leerzeichen)
    *: a,b,c...XYZ
    1: "reg"
    *: a,b,c...XYZ
    1: " " (Leerzeichen)

    Zusammen basteln darfste selbst.

    Wobei da noch nicht der Fall drin ist, dass bspw. ein Komma oder ein Satzpunkt genau nach einem Wort kommt ..
     
    :-) möp

  3. #3
    elmato elmato ist offline Mitglied Brokat
    Registriert seit
    May 2005
    Ort
    NRW
    Beiträge
    408
    Also ich würde sagen es kommt darauf an wie "gut" deine Suchfunktion werden soll. Wenn du z.B. nur Wörter suchen möchtest die mit dem gewünschten Suchbegriff anfangen, würde ich dir eher raten mit dem StringTokenizer die Wörter zu spliten und dann mit startsWith(String serach) zu arbeiten, wenn du natürlich auch die Char Reihenfolge "reg" in der Mitte des Wortes finden möchtest kommst du nicht mehr um RegEX herum...
    mfg
    elmato
     

  4. #4
    Avatar von xeEEenon
    xeEEenon xeEEenon ist offline Mitglied Silber
    Registriert seit
    Mar 2004
    Ort
    Deutschland, Bayern, ... :)
    Beiträge
    87
    Ich habe nun einen Teil der Lösung:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    pattern = Pattern.compile( suchbegriff, Pattern.CASE_INSENSITIVE );
    matcher = pattern.matcher( text );
     
    if ( matcher.lookingAt() )
    {
            // text gefunden
    }


    Nun habe ich nurnoch ein Problem, er sucht nur zu Beginn des Textes und nicht mitten im Text. Hat jemand ne Idee?

    Gruß

    Xen
     

  5. #5
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Schau mal hier:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    
    /**
      * 
      */
     package de.tutorials;
     
     import java.awt.BorderLayout;
     import java.awt.event.KeyAdapter;
     import java.awt.event.KeyEvent;
     import java.text.MessageFormat;
     
     import javax.swing.AbstractListModel;
     import javax.swing.JFrame;
     import javax.swing.JList;
     import javax.swing.JTextField;
     import javax.swing.ListModel;
     
     /**
      * @author Tom
      * 
      */
     public class WordFilterExample extends JFrame {
     
        JTextField textField;
     
        FilterableJList list;
     
        final static String DEFAULT_FILTER = "^#.*";
     
        public WordFilterExample() {
            super("WordFilterExample");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
     
            textField = new JTextField(20);
            textField.addKeyListener(new KeyAdapter() {
                public void keyReleased(KeyEvent e) {
                    list
                            .setFilter(DEFAULT_FILTER.replace("#", textField
                                    .getText()));
                    list.updateUI();
                }
            });
     
            list = new FilterableJList(createDummyData());
     
            add(textField, BorderLayout.NORTH);
            add(list, BorderLayout.CENTER);
     
            pack();
            setVisible(true);
        }
     
        private Object[] createDummyData() {
            return new Object[] { "a", "b", "ba", "bac", "bbc", "c" };
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            new WordFilterExample();
        }
     
        class FilterableJList extends JList {
     
            String filter;
     
            FilteredListModel filteredListModel;
     
            int currentFilterMatches;
     
            int[] currentFilterMapping;
     
            String TOOLTIP_MESSAGE = "{0} Items filtered out of {1}";
     
            public FilterableJList(Object[] data) {
                super(data);
                filteredListModel = new FilteredListModel(super.getModel(), null);
            }
     
            public String getFilter() {
                return filter;
            }
     
            public void setFilter(String filter) {
                this.filter = filter;
            }
     
            private void doFilter() {
                ListModel model = super.getModel();
                int modelSize = model.getSize();
                int[] tmpMapping = new int[modelSize];
     
                currentFilterMatches = 0;
                for (int i = 0; i < modelSize; i++) {
                    if (model.getElementAt(i).toString().matches(this.filter)) {
                        tmpMapping[currentFilterMatches++] = i;
                    }
                }
     
                currentFilterMapping = new int[currentFilterMatches];
                System.arraycopy(tmpMapping, 0, currentFilterMapping, 0,
                        currentFilterMatches);
                filteredListModel.setFilterMapping(currentFilterMapping);
            }
     
            public ListModel getModel() {
                if (filter == null || filter.equals("")) {
                    setToolTipText("");
                    return super.getModel();
                } else {
                    doFilter();
                    setToolTipText(MessageFormat.format(TOOLTIP_MESSAGE,
                            new Object[] { Integer.valueOf(currentFilterMatches),
                                    Integer.valueOf(super.getModel().getSize()) }));
                    return filteredListModel;
                }
            }
        }
     
        class FilteredListModel extends AbstractListModel {
     
            ListModel delegate;
     
            int[] filterMapping;
     
            public FilteredListModel(ListModel delegate, int[] filterMapping) {
                this.delegate = delegate;
                this.filterMapping = filterMapping;
            }
     
            public int getSize() {
                return this.filterMapping != null ? this.filterMapping.length : 0;
            }
     
            public Object getElementAt(int index) {
                return delegate.getElementAt(filterMapping[index]);
            }
     
            public ListModel getDelegate() {
                return delegate;
            }
     
            public void setDelegate(ListModel delegate) {
                this.delegate = delegate;
            }
     
            public int[] getFilterMapping() {
                return filterMapping;
            }
     
            public void setFilterMapping(int[] filterMapping) {
                this.filterMapping = filterMapping;
            }
        }
     }
    Beispiel zum Filtern von Daten einer JList.

    Gruss Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  6. #6
    Avatar von xeEEenon
    xeEEenon xeEEenon ist offline Mitglied Silber
    Registriert seit
    Mar 2004
    Ort
    Deutschland, Bayern, ... :)
    Beiträge
    87
    So habe nun selbst etwas gefunden, hier die Lösung:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    pattern = Pattern.compile( suchbegriff, Pattern.CASE_INSENSITIVE );
    matcher = pattern.matcher( text );
     
    if ( matcher.find() )
    {
            // text gefunden
    }
    cen bedankt sich. 

Ähnliche Themen

  1. [VBS]Regular Expression
    Von Dark Ranger im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 19.10.07, 09:59
  2. Regular Expression
    Von DrOverflow im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 2
    Letzter Beitrag: 23.01.07, 09:16
  3. regular expression $-Suche
    Von Soapp im Forum PHP
    Antworten: 4
    Letzter Beitrag: 09.08.06, 12:23
  4. Regular Expression
    Von time-master im Forum PHP
    Antworten: 7
    Letzter Beitrag: 29.01.06, 15:22
  5. Regular Expression
    Von Norbert Eder im Forum PHP
    Antworten: 4
    Letzter Beitrag: 28.04.04, 12:24