2009-10-10 11 views
4

Je convertis le code Java en C#. La classe StringBuilder en Java semble avoir beaucoup plus de méthodes que la classe C#. Je suis intéressé par (disons) la fonctionnalité Javadifférences entre StringBuilder en Java et C#

sb.indexOf(s); 
sb.charAt(i); 
sb.deleteCharAt(i); 

qui semble être manquant en C#.

Je suppose que les deux premiers pourraient être modelées par

sb.ToString().IndexOf(s); 
sb.ToString().CharAt(i); 

mais serait le troisième fonctionner sur une copie du contenu de sb plutôt que le contenu réel?

Existe-t-il un moyen courant d'ajouter cette fonctionnalité à toutes les méthodes manquantes?

Répondre

6

Vous pouvez utiliser la collection membre Chars pour .charAt. De même, vous pouvez utiliser .Remove (i, 1) pour supprimer un seul caractère à la position i.

+0

@ Joe. Où est Chars - pourriez-vous donner un exemple. (J'ai regardé dans http://msdn.microsoft.com/en-us/library/2839d5h5%28VS.71%29.aspx et n'ai rien trouvé) –

+0

http://msdn.microsoft.com/fr-fr /library/system.text.stringbuilder_members%28VS.71%29.aspx C'est une propriété. En C#, c'est fait via l'indexeur (par exemple mySb [idx]) – Joe

2

Pour la troisième, vous pouvez utiliser la méthode Remove:

sb.Remove(i, 1); 
1

Vous pouvez utiliser des méthodes d'extension comme les suivantes:

static class Extensions 
    { 
     public static int IndexOf(this StringBuilder sb, string value) 
     { 
      return sb.ToString().IndexOf(value); 
     } 

//if you must use CharAt instead of indexer 
     public static int CharAt(this StringBuilder sb, int index) 
     { 
      return sb[index]; 
     } 
    } 
+0

@Yuriy Je viens de Java et donc naturellement chercher une méthode identique en premier. Merci d'avoir signalé l'indexeur. –

0

StringBuilder a un indexeur, cela signifie que vous pouvez simplement accéder à des caractères simples à l'aide sb [i]

Questions connexes