2017-02-14 2 views
0

У меня есть эти номера 00012001, 0000012002, 012003, 12004 и т. Д. Если одно из этих чисел выбрано случайным образом, я хотел бы найти нуль перед номером и сохранить в строке.Найдите нуль перед любым номером в vb.net?

Например,

Если выбран 00012001, '000' хранится в переменной String.

Если выбрано 0000012002, то в строке будет сохранено значение «00000». Там может быть или не быть нуля перед номером.

Есть ли способ найти нуль перед этим номером? Благодарю.

+0

Что означает _selected_, выбранный где? Что вы пробовали? –

ответ

3

С помощью LINQ легко:

Dim zeros = selected.ToString().TakeWhile(Function(c) c = "0"c) 
Dim zeroString = New String(zeros.ToArray()) 

Другой подход, который приходит на ум:

dim countZeros = selected.Length - selected.TrimStart("0"c).Length 
zeroString = New string("0"c, countZeros) 

Тревор сказал, что это хороший кандидат для расширения, здесь оптимизированная версия :

Public Module StringExtensions 
    <System.Runtime.CompilerServices.Extension> _ 
    Public Function TrimStartGetTrimmed(str As String, ParamArray charsToTrim As Char()) As String 
     If str Is Nothing Then 
      Throw New ArgumentNullException(NameOf(str)) 
     End If 
     Dim whiteSpaceCheck As Boolean = charsToTrim Is Nothing OrElse charsToTrim.Length = 0 

     Dim firstNonTrimCharIndex As Integer = 0 
     For Each current As Char In str 
      Dim isTrimChar As Boolean = If(whiteSpaceCheck, Char.IsWhiteSpace(current), charsToTrim.Contains(current)) 
      If Not isTrimChar Then 
       Return str.Substring(0, firstNonTrimCharIndex) 
      End If 
      firstNonTrimCharIndex += 1 
     Next 
     Return str 
    End Function 

    <System.Runtime.CompilerServices.Extension> _ 
    Public Function TrimEndGetTrimmed(str As String, ParamArray charsToTrim As Char()) As String 
     If str Is Nothing Then 
      Throw New ArgumentNullException(NameOf(str)) 
     End If 
     Dim whiteSpaceCheck As Boolean = charsToTrim Is Nothing OrElse charsToTrim.Length = 0 

     For index = str.Length - 1 To 0 Step -1 
      Dim current As Char = str(index) 
      Dim isTrimChar As Boolean = If(whiteSpaceCheck, Char.IsWhiteSpace(current), charsToTrim.Contains(current)) 
      If Not isTrimChar Then 
       Return str.Substring(index + 1) 
      End If 
     Next 
     Return str 
    End Function 
End Module 

Здесь же для C#:

public static class StringExtensions 
{ 
    public static string TrimStartGetTrimmed(this string str, params char[] charsToTrim) 
    { 
     if (str == null) throw new ArgumentNullException(nameof(str)); 
     bool whiteSpaceCheck = charsToTrim == null || charsToTrim.Length == 0; 

     for (var index = 0; index < str.Length; index++) 
     { 
      char current = str[index]; 
      bool isTrimChar = whiteSpaceCheck ? char.IsWhiteSpace(current) : charsToTrim.Contains(current); 
      if (!isTrimChar) 
       return str.Substring(0, index); 
     } 
     return str; 
    } 

    public static string TrimEndGetTrimmed(this string str, params char[] charsToTrim) 
    { 
     if (str == null) throw new ArgumentNullException(nameof(str)); 
     bool whiteSpaceCheck = charsToTrim == null || charsToTrim.Length == 0; 

     for (var index = str.Length - 1; index >= 0; index--) 
     { 
      char current = str[index]; 
      bool isTrimChar = whiteSpaceCheck ? char.IsWhiteSpace(current) : charsToTrim.Contains(current); 
      if (!isTrimChar) 
       return str.Substring(index + 1); 
     } 
     return str; 
    } 
} 
+0

2-й LOT быстрее –

+1

@Trevor: в 99,9% это не имеет значения, потому что вам не нужно делать это 10000000 раз, и это не критично, если пользователь видит его 1 мс раньше или позже. –

+0

Довольно верно @TimSchmelter. Но все же ... стоит упомянуть. Это также было бы хорошим кандидатом для расширения строки. –

0

Это должно работать также:

Function zerodigits(ByVal str As String) 
    Dim re As String = "" 
    For Each c As Char In str 
     Select Case c 
      Case "0"c : re &= c 
      Case Else : Return re 
     End Select 
    Next 
    Return re 
End Function 
Смежные вопросы