2017-01-07 3 views
0

Для получения указаний мой учитель просит, чтобы мы читали из файла, чтобы найти персонажи нашего имени и поместить их на ярлыке в верхней части формы.Get Character Of IndexOf

вот мой код:

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    searchFile = File.OpenText("AcademicEthicsandIntegrityStatement.txt") 


    Dim s As String = searchFile.ReadToEnd 
    Dim b As String = s.IndexOf("b"c) 
    Dim r As Integer = s.IndexOf("r"c) 
    Dim i As Integer = s.IndexOf("i"c) 
    Dim a As Integer = s.IndexOf("a"c) 
    Dim n As Integer = s.IndexOf("n"c) 
    Dim ec As Integer = s.IndexOf("e"c) 

    Dim bRead = GetChar(s, b) 
    Dim rRead = GetChar(s, r) 
    Dim iRead = GetChar(s, i) 
    Dim aRead = GetChar(s, a) 
    Dim nRead = GetChar(s, n) 
    Dim ecRead = GetChar(s, ec) 
    lblName.Text = bRead + rRead + iRead + aRead + nRead + nRead + ecRead 
End Sub 

Текст, который читает в моей LBL является «gmcaad» вместо «Brianne»

Я уверен, что я-то здесь отсутствует или есть много более простой способ сделать это. Любая помощь приветствуется.

+2

Включите Option Strict. 's.IndexOf (" b "c)' возвращает int32, но вы назначаете его переменной string. – Plutonix

+0

Что делать, если буквы вашего имени ** ** ** присутствуют в файле? В этом случае 'String.IndexOf()' вернет значение -1. В настоящее время вы не проверяете этот сценарий. –

+1

Есть немного иронии в том, чтобы заставить SO выполнить домашнее задание для вас и вопрос, который относится к файлу под названием AcademicEthicsandIntegrityStatement.txt. – MrGadget

ответ

1

IndexOf возвращает индекс на основе нуля.
GetChar принимает индекс на основе одного.

Для согласованности

  • , если вы хотите использовать IndexOf, а затем использовать прямую индексацию вместо GetChar:

    Dim bRead = s(b) 
    Dim rRead = s(r) 
    
  • , если вы хотите использовать GetChar, а затем использовать InStr вместо IndexOf который также возвращает одно значение.

+0

Ах да! Большое вам спасибо, я использовал ваш первый пример. Только то, что я искал. –

+0

@BrianneRiggle Также, пожалуйста, сделайте [что говорит Плутоникс] (http://stackoverflow.com/questions/41526361/get-character-of-indexof#comment70258727_41526361). – GSerg

0

Короткий ответ ... чувствителен к регистру:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 
    With File.ReadAllText("AcademicEthicsandIntegrityStatement.txt") 
     For Each C As Char In "Brianne".ToCharArray 
      ' Note this is case-sensitive because it uses a binary comparison 
      Dim Index As Integer = .IndexOf(C) 
      If Index >= 0 Then lblName.Text &= .Substring(Index, 1) 
     Next 
    End With 
End Sub 

... и не чувствительны к регистру:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 
    With File.ReadAllText("AcademicEthicsandIntegrityStatement.txt") 
     For Each C As Char In "Brianne".ToCharArray 
      ' Note this is not case-sensitive 
      Dim Index As Integer = .IndexOf(C.ToString, StringComparison.InvariantCultureIgnoreCase) 
      If Index >= 0 Then lblName.Text &= .Substring(Index, 1) 
     Next 
    End With 
End Sub