web-dev-qa-db-fra.com

Façon correcte de couper une chaîne en Java

En Java, je fais ceci pour couper une chaîne: 

String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.trim();
System.out.println("after->>"+input+"<<-");

La sortie est: 

before->> some Thing <<-
after->>some Thing<<-

Travaux. Mais je me demande si, en assignant une variable à elle-même, je fais la bonne chose. Je ne veux pas gaspiller des ressources en créant une autre variable et en lui affectant la valeur ajustée. Je voudrais effectuer la finition sur place.

Alors est-ce que je fais ça bien?

27
Quest Monger

Vous le faites bien. De la documentation

Les chaînes sont constantes. leurs valeurs ne peuvent pas être modifiées après leur création. Les tampons de chaîne supportent les chaînes mutables. Les objets String étant immuables, ils peuvent être partagés.

Également à partir de documentation

trim

public String trim ()

Retourne une copie de la chaîne, avec les espaces de début et de fin omis. Si cet objet String représente une séquence de caractères vide, ou les premier et dernier caractères de la séquence de caractères représentée par Cet objet String a tous les deux un code supérieur à '\ u0020' (caractère espace), puis une référence à cet objet String est renvoyée.

Sinon, s'il n'y a pas de caractère avec un code supérieur à '\ u0020' dans la chaîne, puis un nouvel objet String représentant une chaîne vide est créé et retourné.

Sinon, k est l’indice du premier caractère de la chaîne dont le code est supérieur à '\ u0020', et m est l’indice du dernier caractère de la chaîne dont le code est supérieur à '\ u0020'. UNE Un nouvel objet String est créé, représentant la sous-chaîne de cet objet chaîne qui commence par le caractère à l’indice k et se termine par le caractère à l’indice m, c’est-à-dire le résultat de cette chaîne (k, m + 1).

Cette méthode peut être utilisée pour couper les espaces (tels que définis ci-dessus) à partir du fichier début et fin d'une chaîne.

Résultats:

Une copie de cette chaîne avec les espaces en début et en fin supprimés, ou cette chaîne si elle n'a pas de blanc en début ou en fin espace.

18
gpojd

Comme les chaînes en Java sont des objets immuables , il n’existe aucun moyen d’exécuter le découpage sur place. La seule chose que vous pouvez faire pour couper la chaîne est de créer une nouvelle version découpée de votre chaîne et de la renvoyer (et c'est ce que fait la méthode trim()).

10
aga

En théorie, vous ne vous affectez pas une variable. Vous affectez la valeur renvoyée par la méthode trim () à votre entrée de variable.

En pratique, l'implémentation de la méthode trim () est optimisée pour créer (et renvoyer) une autre variable uniquement lorsque cela est nécessaire. Dans d'autres cas (lorsqu'il n'y a pas réellement besoin de rogner), il renvoie une référence à la chaîne d'origine (dans ce cas, vous affectez une variable à elle-même).

Voir http://grepcode.com/file/repository.grepcode.com/Java/root/jdk/openjdk/6-b14/Java/lang/String.Java#String.trim%28%29

Quoi qu'il en soit, trim () ne modifie pas la chaîne d'origine, c'est donc la bonne façon de l'utiliser.

2
Dario

L'approche traditionnelle consiste à utiliser la méthode de découpage en ligne ... par exemple:

String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
System.out.println("after->>"+input.trim()+"<<-");

Si c'est une chaîne qui doit être coupée pour tous les usages, coupez-la comme vous l'avez fait auparavant. Réutiliser le même emplacement mémoire que ce que vous avez fait n'est pas une mauvaise idée si vous souhaitez communiquer votre intention à d'autres développeurs. Lors de l’écriture en Java, la gestion de la mémoire n’est pas leur principal problème puisque le "cadeau" de Java est que vous n’avez pas besoin de la gérer.

1
Bruce Chidester

Oui, mais il restera toujours deux objets jusqu'à ce que le ramasse-miettes supprime la valeur d'origine pointée par l'entrée. Les chaînes en Java sont immuables. Voici une bonne explication: Immutabilité des chaînes de caractères en Java .

1
Isaac

La méthode Java string trim () élimine les espaces de début et de fin

public class StringTrimExample{  
public static void main(String args[]){  
String s1="  hello string   ";  
System.out.println(s1+"javatpoint");//without trim()  
System.out.println(s1.trim()+"javatpoint");//with trim()  
}}  

sortie

 hello string   javatpoint
hello stringjavatpoint   
0
Mahmoud Elebiary

Si nous devons couper une chaîne sans utiliser trim (), les méthodes split () de Java, le code source suivant peut être utile. 

static String allTrim(String str)
{
    int j = 0;
    int count = 0;  // Number of extra spaces
    int lspaces = 0;// Number of left spaces
    char ch[] = str.toCharArray();
    int len = str.length();
    StringBuffer bchar = new StringBuffer();
    if(ch[0] == ' ')
    {
        while(ch[j] == ' ')
        {
            lspaces++;
            j++;
        }   
    }   
    for(int i = lspaces; i < len; i++)
    {   
        if(ch[i] != ' ')
        {
            if(count > 1 || count == 1)     
            {
                bchar.append(' ');
                count = 0;
            }
            bchar.append(ch[i]);
        }
        else if(ch[i] == ' ')
        {
            count++;    
        }
    }
    return bchar.toString();
}
0
pnkjshrm30