Methode die Text kürzt?

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.

BBCode ist eingeschaltet
[img] ist eingeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Ansicht erweitern Die letzten Beiträge des Themas: Methode die Text kürzt?

von platin(x) » 30 Okt 2004, 18:55

Wieso zum Teufel krieg ich nie diese Fehler. ggggggggrrrrr

von Martin » 30 Okt 2004, 18:45

platin(x) hat geschrieben:Du sieht's aber nur wenn du einige Feeds drin hast oder das Fenster sehr klein ist. Falls zu viele drin sind, wird nichts gekürzt.
Ich finde, daß sich das Kürzen nicht lohnt.
Weil:
  • 1. fällt das eh niemandem auf
und
  • 2. ;-)
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:100)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.ui.NewsFeedStatusBar$StatusTextWrapper.update(NewsFeedStatusBar.java:338)
at newsfeedplugin.ui.NewsFeedStatusBar$StatusTextWrapper.add(NewsFeedStatusBar.java:310)
at newsfeedplugin.ui.NewsFeedStatusBar$StatusTextWrapper.access$300(NewsFeedStatusBar.java:294)
at newsfeedplugin.ui.NewsFeedStatusBar.propertyChange(NewsFeedStatusBar.java:150)
at newsfeedplugin.core.NewsFeedObject.firePropertyChange(NewsFeedObject.java:527)
at newsfeedplugin.core.NewsFeedObject.setState(NewsFeedObject.java:304)
at newsfeedplugin.core.NewsFeedObject.downloadAndParseXml(NewsFeedObject.java:325)
at newsfeedplugin.ui.NewsFeedChooserPanel$9.run(NewsFeedChooserPanel.java:258)

von platin(x) » 30 Okt 2004, 18:35

Hmm, habt ihr gedacht ich will die Überschriften der Nachrichten kastrieren?
Sowas würd mir doch niiiemals in den Sinn kommen :roll: :wink:

von bodo » 29 Okt 2004, 19:09

Axo...da hab ich garnich sooovieele feeds das das problematisch sein könnte

von platin(x) » 29 Okt 2004, 18:47

Optionen => Alle Aktualisieren

Dort steht dann "Lade:" und die Feed-Namen.
Du sieht's aber nur wenn du einige Feeds drin hast oder das Fenster sehr klein ist. Falls zu viele drin sind, wird nichts gekürzt.

von bodo » 29 Okt 2004, 18:38

Wo benutzt du das!? Hab kurz ma in das Plugin reingschaut und nix gefunden?

von platin(x) » 29 Okt 2004, 18:11

In 10 min seht ihrs. Danach könnt ihr mich in der Lust zerreisen ;)

von bodo » 29 Okt 2004, 17:44

Das wäre auch das gewohnte Verhalten ;). Wofür brauchst du das eigenltich genau?

von Til » 29 Okt 2004, 17:32

Also ich finde das auch etwas heftig. Mach doch lieber die normalen drei Punkte und dann den vollen Text als Tooltip. Ich glaube das bringt dem Benutzer mehr...

von platin(x) » 29 Okt 2004, 15:09

bodo hat geschrieben:H.f. M.e.e. sdf.er.we.er.e.wer. usw ;)
Das wär der absolute worst-case ;)

Mal auf die Schnelle:

Code: Alles auswählen

    public static String truncateText(FontMetrics metrics, int width, String txt) {
        if(txt == null) {
            return null;
        }
        
        final int actWidth = metrics.stringWidth(txt);
        if(actWidth <= width) {
            return txt;
        }
                
        StringBuffer buffer = new StringBuffer(txt.length());
        String[] parts = txt.split("\\s");

        int minLength = 0;
        for(int i=0; i<parts.length; i++) {
            if(parts[i] != null) {
                minLength = Math.max(minLength, parts[i].trim().length());
            }
        }
        
        for(int i=0; i<parts.length; i++) {
            
            if(parts[i] != null) {
                String elem = parts[i].trim();
                if(elem.length() >= minLength ) {
                    
                    if(elem.endsWith(",")) {
                        buffer.append(elem.substring(0, elem.length()-3));
                        buffer.append(".,");
                    } else {
                        buffer.append(elem.substring(0, elem.length()-2));
                        buffer.append(".");
                    }
                    
                } else {
                    buffer.append(elem);
                }
                
                if(i <= parts.length) {
                    buffer.append(" ");    
                }
            }
            
        }
        return truncateText(metrics, width, buffer.toString());
    }
Für meinen Anwendungsfall bislang ganz OK.

von bodo » 29 Okt 2004, 14:43

Ich find das irgendwie doof...die kryptischen sachen kann doch keiner Verstehen :?

H.f. M.e.e. sdf.er.we.er.e.wer. usw ;) ?!

Dann lieber mit "..." am schluß

von platin(x) » 29 Okt 2004, 13:32

Klar, schön sieht das nicht aus...

Der Text wird nur kurz beim Aktualisieren angezeigt, ich will damit erreichen das hinten nicht ein Feed verschluckt wird, deswegen sollen die anderen Platz machen ;)

von Crasline » 29 Okt 2004, 12:40

aber ehrlich gesagt find ich das beispiel was du gepostet hast für die abgekürzten wörter nicht wirklich gut und so überhaupt nicht verständlich ... das klingt so nach Handy telefonierem im Funkloch :)

von platin(x) » 29 Okt 2004, 12:37

Das will ich ja grad nicht, der Text soll nicht am Ende gekürzt werden (diese "..."), sondern die Wörter sollen im ganzen Text beschnitten werden.
Ich will damit erreichen das nicht hinten plötzlich ganze Wörter fehlen, sondern das dann einfach in der Mitte ein Wort abgekürzt wird.

von Til » 29 Okt 2004, 11:37

Schmeiss einfach den kompletten Text in ein JLabel rein, das kürzt den Text dann automatisch.

Damit dein Label nicht den ganzen Dialog extrabreit macht, kannst du mit setPreferredSize() dem Label eine feste Größe geben.

Oder willst du mehrzeiligen Text?

Nach oben