2010-02-24 5 views
1

Comment puis-je trouver le dernier mais un caractère dans un vbstringDernier mais un Char dans vb.net Chaîne

par exemple. Dans la chaîne V1245-12V0 je veux retourner V

+0

Voulez-vous toujours l'avant-dernier caractère ou le dernier caractère alpha de la chaîne. Cette question est plutôt vague. – JoshBerke

Répondre

0

Si vous voulez obtenir le dernier caractère alpha dans une chaîne, vous pouvez utiliser une requête LINQ tels que (C#):

var d = from c in myString.ToCharArray().Reverse() 
       where Char.IsLetter(c) 
       select c; 
return d.First(); 
+0

Voir la question: VB String. – NTDLS

0

string.Substring (string.Length - 2, 1);

2

Désolé, il a été un moment que je l'ai fait VB donc cela ne peut pas être parfait (et est probablement un mélange de C# et VB), mais vous voyez l'idée:

Dim s = "V1245-12V0" 
Dim lastButOneLetter = String.Empty 

If s.Length > 1 Then 
    'Can only get the last-but-one letter from a string that is minimum 2 characters 
    lastButOneLetter = s.Substring(s.Length - 2, 1) 
Else 
    'do something if string is less than 2 characters 
End If 

EDIT: fixe être compilable VB Code .NET.

+0

+1 pour le contrôle de longueur. -1 pour utiliser la sous-chaîne. – Joel

+0

@Joel - pourquoi -1 pour utiliser la sous-chaîne? C'est beaucoup plus propre et plus évident que Strings.GetChar ... ou mystring (...) –

+0

Je pensais que l'OP était assez clair en demandant un "Char". Comme je n'ai pas baissé le ton pour quelqu'un d'autre pour l'utilisation de la sous-chaîne, je vais vous donner le maximum. Il ne faut pas oublier de faire le contrôle de la longueur. – Joel

0

Utilisez le Substring sur la chaîne s contenant « V1245-12V0 »

s.Substring(s.Length - 2, 1); 
+0

Vous me demandez pourquoi cela a été déprécié? Comme d'autres l'ont mentionné sous une forme similaire ... downvote et ne pas laisser un commentaire est jugé très grossier et ignorant qui va à l'encontre de l'esprit de SO. Comment voulez-vous que je baisse votre réponse, ne laissez pas un commentaire et vous ne saviez pas quelle était la raison ...? – t0mm13b

+1

C'est probablement Joel Potter qui est en désaccord avec l'utilisation de la sous-chaîne. Si vous remarquez que toutes les réponses qui ont utilisé Substring ont été downvoted même si c'était une solution parfaitement adéquate basée sur les informations qui nous ont été données.Un IMO downvote est pour une réponse qui ne résout pas le problème original, pas à cause de la préférence personnelle de quelqu'un. –

+0

@Andy: J'ai posté un commentaire à sa réponse .... – t0mm13b

-1

Vous pouvez avoir vos propres fonctions comme

Function Left(ByVal str as string, byval index as integer) As String 

    Left=str.Substring(0,index); 
End Function 

Function Right(ByVal str as string, byval index as integer) As String 

    Right=str.Substring(str.Length-index) 
End Function 

et les utiliser pour obtenir ce dont vous avez besoin.

+0

Ce _S_ VB: vous avez déjà 'Left',' Mid', et 'Right'. –

1
Dim secondToLastChar As Char 
secondToLastChar = Microsoft.VisualBasic.Strings.GetChar(mystring, mystring.Length - 2) 

http://msdn.microsoft.com/en-us/library/4dhfexk4(VS.80).aspx

Ou tout simplement se rappeler que toute chaîne est un tableau de caractères;

secondToLastChar = mystring(mystring.Length - 2) 
+0

@Joel Potter - alors pourquoi ne pas modifier la question pour spécifier de ne pas utiliser la sous-chaîne au lieu de downvoting tout le monde malgré une question vague posée! Vous avez assez de points de rep pour faire ça! – t0mm13b

+0

Je n'ai pas downvote tout le monde. J'ai simplement augmenté la meilleure solution (Coehoorn's). – Joel

0

Était-ce difficile?

dim mychar as string 
dim yourstring as string 
yourstring="V1245-12V0" 
mychar=yourstring.Substring(yourstring.Length - 2, 1) 
4

Ne pas utiliser sous-chaîne pour obtenir un seul caractère

Dim MyString As String = "V1245-12V0" 
Dim MyChar As Char = MyString(MyString.Length - 2) 
+0

Je suis d'accord. Je ne vois pas pourquoi 80% des réponses ont choisi cette méthode. – Joel

+0

Il est plus flexible basé sur ce que l'OP veut faire avec ce personnage plus tard. La seule raison pour laquelle j'utiliserais char en faveur de chaîne est à moins que je n'étais absolument certain à 1000% que ce serait toujours un personnage requis et que quelqu'un ne viendrait pas dire "en fait je veux maintenant 2 caractères de la chaîne" ou était désespérément à court de mémoire, comme un appareil embarqué. –

0

Voici une solution VB:

Dim text = "V1245-12V0" 
Dim v = Left(Right(text, 2), 1) 

Vous ne pas besoin de vérifier la longueur de text , sauf pour votre sémantique quant à ce que vous voulez arriver pour vide (et Nothing) et les chaînes de caractères simples.