Daniel André Ответов: 3

Как мне использовать text.startswith VB.NET


Так что у меня есть три струны:

1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVn2 он может варьироваться от 26 до 35 символов.

3J98t1WpEZ73CNmQviecrnyiWrnqRhWNly он может варьироваться от 26 до 35 символов.

bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq он может варьироваться от 26 до 44 символов.

Я хочу проверить, когда я копирую любую из этих строк, она говорит "true", когда длина находится между 26 и 36 (или 26-46 для 3-й строки, например).

Это не работает, я не знаю, что происходит на самом деле

Что я уже пробовал:

TextBox1.Text = Clipboard.GetText 'It's using a timer to constantly get the clipboard text.

        If TextBox1.Text.StartsWith("1") Then
            If TextBox1.Text.Length = "26" Or "27" Or "28" Or "29" Or "30" Or "31" Or "32" Or "33" Or "34" Or "35" Then
                Label3.Text = "true"
            End If
        Else
            Label3.Text = "false"
        End If


        If TextBox1.Text.StartsWith("3") Then
            If Label2.Text = "26" Or "27" Or "28" Or "29" Or "30" Or "31" Or "32" Or "33" Or "34" Or "35" Then
                Label3.Text = "True"
            End If
        Else
            Label3.Text = "false"
        End If


        If TextBox1.Text.StartsWith("bc1") Then
            If TextBox1.Text.Length = "26" Or "27" Or "28" Or "29" Or "30" Or "31" Or "32" Or "33" Or "34" Or "35" Or "36" Or "37" Or "38" Or "39" Or "40" Or "41" Or "42" Or "43" Or "44" Then
                Label3.Text = "True"
            End If
        Else
            Label3.Text = "false"
        End If

3 Ответов

Рейтинг:
2

phil.o

Dim length, value As Integer

If TextBox1.Text.StartsWith("1") Then
   length = TextBox1.Text.Length
   If length >= 26 And length <= 35 Then
      Label3.Text = "true"
   End If
Else
   Label3.Text = "false"
End If


If TextBox1.Text.StartsWith("3") Then
   If (Integer.TryParse(Label2.Text, value)) Then
      If value >= 26 And value <= 35 Then
         Label3.Text = "True"
      End If
   End If
Else
   Label3.Text = "false"
End If

If TextBox1.Text.StartsWith("bc1") Then
   length = TextBox1.Text.Length
   If length >= 26 And length <= 44 Then
      Label3.Text = "True"
   End If
Else
   Label3.Text = "false"
End If 

Это можно было бы еще больше упростить (с помощью Else условия, например), но так как логика не кажется мне вполне понятной, я не оптимизировал ее.

Важно сравнивать целочисленные значения с целочисленными значениями (а не со строками) и избегать написания условий, пропуская имя переменной (value >= 26 And value <= 44 вместо value >= 26 And <= 44.


Daniel André

Ну, строка bc1 работает, но остальная часть дает мне "ложное" утверждение.
Есть предложения?

phil.o

Да, поставьте точку останова и начните отладку. Затем исправьте код в соответствии с правильной логикой :)

Рейтинг:
0

CHill60

Во-первых, убедитесь, что все это закончилось до того, как событие таймера снова сработает и перезапустит вашу функцию.

TextBox.Text.Length не возвращает строку, поэтому If TextBox1.Text.Length = "26" это неправильный поступок.

Когда вы говорите "не работает", Вы имеете в виду, что он не будет компилироваться? Если бы я писал эти If-утверждения, они выглядели бы примерно так

If TextBox1.Text.Length = 26 Or TextBox1.Text.Length = 27 Or TextBox1.Text.Length = 28 Or TextBox1.Text.Length = 29 Or TextBox1.Text.Length = 30 Or TextBox1.Text.Length = 31 Or TextBox1.Text.Length = 32 Or TextBox1.Text.Length = 33 Or TextBox1.Text.Length = 34 Or TextBox1.Text.Length = 35 Then
Ну, на самом деле, это было бы не так, это было бы больше похоже
If TextBox1.Text.Length >= 26 and TextBox1.Text.Length <= 35

И последнее - не помечайте свой вопрос как C#, если это так. VB.NET!


Рейтинг:
0

Maciej Los

Я бы посоветовал почитать о Выбрать...Оператор Case - Visual Basic | Microsoft Docs[^]

Использование:

Dim data As String() =
{
	"1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2", 'it can vary from 26 to 35 characters.
	"3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy", 'it can vary from 26 to 35 characters.
	"bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq" 'it can vary from 26 to 44 characters.
}

Dim retVal As Boolean = False

For Each s As String In data
	Select Case s.Substring(0,1)
		Case "1", "3"
			retVal = (s.Length >=26 And s.Length<=35)

		Case "b"
			retVal = (s.Length >=26 And s.Length<=44)

	End Select
	Console.WriteLine(String.Format("{0} => {1}", s, retVal))
Next


Daniel André

Строки, которые я привел, были просто примером, они могут варьироваться.

Maciej Los

Ну и что?