Trouver un caractère spécifique dans une chaîne de caractères dans Matlab

Supposons que j'ai une chaîne de caractères 'johndoe@hotmail.com'. Je veux stocker la chaîne avant et après " @ " dans 2 chaînes séparées. Quelle serait la méthode la plus facile de trouver le caractère "@" ou d'autres caractères dans la chaîne?

19
demandé sur Shai 2009-09-15 08:42:13

7 réponses

STRTOK et un indice de fonctionnement devrait faire l'affaire:

str = 'johndoe@hotmail.com';
[name,address] = strtok(str,'@');
address = address(2:end);

Ou sur la dernière ligne pourrait aussi être:

address(1) = '';
17
répondu gnovice 2009-09-15 06:36:47

Vous pouvez utiliser strread:

str = 'johndoe@hotmail.com';
[a b] = strread(str, '%s %s', 'delimiter','@')
a = 
    'johndoe'
b = 
    'hotmail.com'
12
répondu Amro 2009-09-15 06:56:35
>> email = 'johndoe@hotmail.com'
email =
johndoe@hotmail.com
>> email == '@'
ans =
  Columns 1 through 13
     0     0     0     0     0     0     0     1     0     0     0     0     0
  Columns 14 through 19
     0     0     0     0     0     0
>> at = find(email == '@')
at =
     8
>> email(1:at-1)
ans =
johndoe
>> email(at+1:end)
ans =
hotmail.com

ce serait un peu plus compliqué si vous cherchiez quelque chose avec plus d'un caractère, ou si vous n'étiez pas sûr qu'il y en ait exactement un @, et dans ce cas, MATLAB a beaucoup de fonctions pour rechercher du texte, y compris des expressions régulières (voir doc regexp).

11
répondu kwatford 2009-09-15 04:51:00

TEXTSCAN fonctionne aussi.

str = 'johndoe@hotmail.com';
parts = textscan(str, '%s %s', 'Delimiter', '@');

renvoie un tableau de cellules où parts{1} est 'johndoe' et parts{2} est 'hotmail.com'.

7
répondu mtrw 2009-09-15 06:44:57

si ce fil n'est pas complètement énuméré maintenant, puis-je en ajouter un autre? Une pratique perl-base de la fonction MATLAB:

email = 'johndoe@hotmail.com';
parts = regexp(email,'@', 'split');

parts est un tableau de cellules à deux éléments similaire à l'implémentation de textscan par mtrw. Peut-être exagéré, mais regexp est beaucoup plus utile en séparant une chaîne par de multiples caractères de délimitation ou la recherche de motif. Le seul inconvénient est l'utilisation d'expressions régulières que je n'ai pas encore maîtrisées après 15 ans de codage.

5
répondu SnakeEyes1482 2013-04-30 13:14:48

j'ai utilisé strtok et strrep de Matlab à la place.

-1
répondu stanigator 2009-09-15 05:05:32

String email = "johndoe@hotmail.com";

    String a[] = email.split("@");
    String def = null;
    String ghi = null;
    for(int i=0;i<a.length;i++){
        def = a[0];
        ghi = a[1];
    }
-4
répondu sachin 2012-11-15 11:48:45