2014-10-24 5 views
-1

У меня есть следующие строки: Anaheim Temp. 1-N/A и Cevera-N/A.Получение одного слова из заданной строки

Как получить Temp с первого и Cevera со второго?

Прошу прощения, я постараюсь предоставить дополнительную информацию. Так что скажем, что я хочу разбить первую строку на имя и фамилию, чтобы имя было бы именем «Анахайм» вторым примером «Темп»: «Alex Orellana-NA», поэтому первым именем будет «Alex» фамилия «Orellana», как я могу избавиться от того, что происходит после специальных символов, таких как «-» ». "/"

+2

Вы имеете в виду, как определить, содержит ли строка строку? Ваш существующий вопрос не имеет большого смысла. – DeanOC

+3

Прочтите [это] (http://stackoverflow.com/help/how-to-ask). –

+0

Я просто прошу здесь указать строку Anaheim Temp. 1-N/A "как мне получить« Temp »из этой строки? Также есть еще одна строка« Cevera-N/A »Как я могу получить ---->« Cevera » –

ответ

0

Думаю, я понимаю, о чем вы просите. Вы ищете функцию, которая будет принимать 2 строки и искать одну строку с фразой, а затем возвращать результат, если она содержит. Я считаю, что у меня есть решение вашей проблемы:

Public Function FindCertainString(stringToSearch As String, stringToFind As String) As String 

    For index = 1 To stringToSearch.Length - 1 

     Dim character As Char = stringToSearch(index) 

     ' Parse through whole string and find any match values 

     If character = stringToFind(0) Then 
      ' Matched the first letter 

      Dim tempIndex As Integer = index 
      Dim someWord As String = "" 

      For innerIndex = 1 To stringToFind.Length 

       someWord += stringToSearch(tempIndex) 
       tempIndex += 1 

      Next 

      If someWord = stringToFind Then 
       ' Found the word you were looking for 
       Return someWord 
      End If 

     End If 

    Next 

    Return "" 

End Function 

Это должно удовлетворить то, что вы ищете, потому, что эта функция будет сделать, это взять в две строки, то для stringToSearch будет празем через каждый символ до тех пор, пока не определены совпадение с начальным письмом в stringToFind оттуда собирает равную длину в символах и проверяет, соответствует ли оно значению stringToFind.

+0

' Если stringToSearch.Contains (stringToFind) Затем «...: /' –

0

Информация: Этот ответ является устаревшим и был основан на первоначальный вопрос ОП перед редактирует.


"Anaheim Temp. 1-N/A".IndexOf("Temp") ' -> returns 8 = found at index 8 ! 
    "Cevera-N/A".IndexOf("Cevera") ' -> returns 0 = found at index 0 ! 
    "Cevera-N/A".IndexOf("Temp") ' -> returns -1 = not found ! 
    "Cevera-N/A".IndexOf("cevera") ' -> returns -1 = not found ! because it's lowercase ! 

Я сделать согласен с комментариями выше: вы не предоставили то, что цель найти указанное слово или кастрированный баран являются ваш ищет сложной логики для подтверждения наличие определенного идентификатора в литерале (Temp или Cereva или любое другое конкретное слово в ЛЮБОЕ предоставленное буквальное предложение или формула)

Мы не знаем, что означает «Anaheim Temp. 1-N/A», откуда это произошло, так как это значение переменной строки или какое-то буквальное выражение формулы, введенной в текстовое поле ...

Вы хотите найти "Temp" в "Anaheim Temp. 1-N/A ", это уже есть !!! Как бы нам пришлось искать далеко, а, очевидно, " Anaheim Temp. 1-N/A « содержит „Temp“?

И есть несколько способов, чтобы знать, если строка содержит другую строку, но полезная одна зависит от того, где строки » Анахайм Temp. 1-N/A ", и почему строка" Temp "должна быть найдена там, но не" 1 "или" -N "или даже" SantaMaria ", и цель поиска этого слова для ...

You haven't tried anything до сих пор, если я понимаю, в то время как вы хотите, чтобы угадать логику .. XD

0

Что делает следующий код является извлечение компонентов название один за другим, пока неверный символ не найден.

Ввод функции - это номер String, который содержит буквальные имена. Выходной файл - List(Of String), который содержит каждый извлеченный компонент имени.

Выборочная проверка -> Результирующая Имя Компоненты

"Anaheim Temp. 1-N/A" -> [Anaheim],[Temp] 
"Cevera-N/A"   -> [Cevera] 
"Alex Orellana-NA" -> [Alex],[Orellana] 
"Marie J Blige ?"  -> [Marie],[J],[Blige] 
"Marie J. Blige /vv" -> [Marie],[J.],[Blige] 
"José F. 1452"  -> [José],[F.] 
"P. P. d'Arvor"  -> [P.],[P.],[d] 

Для того, чтобы "П. П. d'Arvor" работа должна включать в себя обработку [ '] гольца, который я не сделал.

(EDIT:. Это было не о подстрок)

Public Function GetNames(ByVal SampleName As String) As List(Of String) 
    Dim CharIndex As Integer = 0 
    Dim NameStart As Integer = 0 
    Dim NamesList As New List(Of String) 

    ' Iterate the Chars from the left 
    While CharIndex < SampleName.Length 
     If Not Char.IsLetter(SampleName(CharIndex)) Then 
      If Char.IsWhiteSpace(SampleName(CharIndex)) Then 
       If CharIndex > NameStart Then 
        NamesList.Add(SampleName.Substring(NameStart, CharIndex - NameStart)) 
       End If 
       NameStart = CharIndex + 1 
      Else 
       If (SampleName(CharIndex) = "."c) Then 
        ' This, to allow examples like "Angelina J.-N/A" 
        ' "Angelina" will be added first 
        ' then "J." (with the dot) will be added aswell. 

        If NameStart = (CharIndex - 1) Then 
         ' This simple check prevent the picking of 
         ' two consecutive dots like 
         ' "Jarod R.. Solo" -> "Jarod" and "R." ("Solo" discarded) 
         ' "A. Leo D........" -> "A.", "Leo" and "D." 
         ' ". Andrew" -> "" (break immediately) 

         NamesList.Add(SampleName.Substring(NameStart, CharIndex - NameStart + 1)) 
         NameStart = CharIndex + 1 
        Else 
         If NameStart < CharIndex Then 
          NamesList.Add(SampleName.Substring(NameStart, CharIndex - NameStart)) 
         End If 
         Exit While 
        End If 
       Else 
        If NameStart < CharIndex Then 
         NamesList.Add(SampleName.Substring(NameStart, CharIndex - NameStart)) 
        End If 

        Exit While ' Discard the rest 
       End If 
      End If 
     End If 
     CharIndex = CharIndex + 1 
    End While 

    Return NamesList 
End Function 

Затем с помощью метода так:

Public Sub TestNames() 
    Dim TestName As String 
    Dim NameComponents As List(Of String) 

    TestName = Microsoft.VisualBasic.InputBox("Enter Name") ' lazy me -_- 
    NameComponents = GetNames(TestName) 

    ' wanna see preview ? un-comment the following. 
    'TestName = "" 
    'For Each Word As String In NameComponents 
    ' TestName = TestName + "[" + Word + "]" + Environment.NewLine 
    'Next 
    'MessageBox.Show(TestName) 

    If NameComponents.Count > 1 Then ' You have at least two Names. 
     ' The logic here is up to you 
     ' FirstName = NameComponent.Item(0) 
     ' LastName = NameComponent.Item(1) 
    ElseIf NameComponents.Count > 0 Then ' You have only one Name. 
     ' FirstName = NameComponent.Item(0) 
     ' LastName = "" 
    Else 
     ' FirstName = "Unknown" 
     ' LastName = "" 
    End If 
End Sub 

EDIT: Фиксированное синдром множественного последовательных точек.

Смежные вопросы