web-dev-qa-db-fra.com

Comment tronquer une corde dans groovy?

Comment tronquer une corde dans groovy?

J'ai utilisé:

def c = truncate("abscd adfa dasfds ghisgirs fsdfgf", 10)

mais obtenir une erreur.

30
Srinath

La communauté Groovy a ajouté une méthode take() qui peut être utilisée pour une troncature facile et safe string.

Exemples:

"abscd adfa dasfds ghisgirs fsdfgf".take(10)  //"abscd adfa"
"It's groovy, man".take(4)      //"It's"
"It's groovy, man".take(10000)  //"It's groovy, man" (no exception thrown)

Il existe également une méthode correspondante drop():

"It's groovy, man".drop(15)         //"n"
"It's groovy, man".drop(5).take(6)  //"groovy"

take() et drop() sont tous deux relatifs au start de la chaîne, comme dans "prendre de face" et "déposer de face".

Console Groovy en ligne pour exécuter les exemples:
https://ideone.com/zQD9Om - (remarque: l'interface utilisateur est vraiment mauvaise)}

Pour plus d'informations, voir "Ajouter une méthode de prise à Collections, Iterators, Arrays":
https://issues.Apache.org/jira/browse/GROOVY-4865

67
Dem Pilafian

Dans Groovy, les chaînes peuvent être considérées comme des plages de caractères. En conséquence, vous pouvez simplement utiliser les fonctionnalités d'indexation de Groovy et faire myString[startIndex..endIndex]

Par exemple,

"012345678901234567890123456789"[0..10]

les sorties

"0123456789"
8
Riduidel

Pour éviter la rupture de Word, vous pouvez utiliser le Java.text.BreakIterator . Cela tronquera une chaîne à la limite de Word la plus proche après un nombre de caractères.

Exemple

package com.example

import Java.text.BreakIterator

class exampleClass { 

    private truncate( String content, int contentLength ) {     
        def result

        //Is content > than the contentLength?
        if(content.size() > contentLength) {  
           BreakIterator bi = BreakIterator.getWordInstance()
           bi.setText(content);
           def first_after = bi.following(contentLength)

           //Truncate
           result = content.substring(0, first_after) + "..."
        } else {
           result = content
        }

        return result
    }
}
1
Tyler Rafferty

nous pouvons simplement utiliser les fonctionnalités d'indexation de Groovy et faire someString[startIndex..endIndex].

Par exemple:

def str = "abcdefgh"
def outputTrunc = str[2..5]
print outputTrunc

Console: 

"cde"
1
Vikash Kumar

Voici mes fonctions d'assistance pour résoudre ce problème. Dans de nombreux cas, vous voudrez probablement tronquer les mots par mot plutôt que les caractères, aussi j'ai collé la fonction pour cela également.

public static String truncate(String self, int limit) {
    if (limit >= self.length())
        return self;

    return self.substring(0, limit);
}

public static String truncate(String self, int hardLimit, String nonWordPattern) {
    if (hardLimit >= self.length())
        return self;

    int softLimit = 0;
    Matcher matcher = compile(nonWordPattern, CASE_INSENSITIVE | UNICODE_CHARACTER_CLASS).matcher(self);
    while (matcher.find()) {
        if (matcher.start() > hardLimit)
            break;

        softLimit = matcher.start();
    }
    return truncate(self, softLimit);
}
0
rednoah