2013-07-22 2 views
-1

Как преобразовать строку типа:Как преобразовать строку в массив строк

Dim myString = "TEST" 

Чтобы массив строк, чтобы иметь что-то вроде:

Dim myStringArray = new String() {"T","E","S","T"} 

Благодарности

+1

Вы ищете массив символов, если вы всегда хотите, чтобы каждый элемент содержал один символ. –

+0

Не могли бы вы попробовать: 'myStringArray.split ('')' –

+1

@PhongVo Это невозможно. Вы не можете разделить без разделителя. –

ответ

1

Решили сделать тест для наиболее эффективного метода. Метод Марцина Юрашека, более 10 000 000 итераций, в среднем составлял 4000 м. Метод Фабиана Биглера в среднем составлял 3200 м.

Ниже приведен метод в среднем 1500 м.

Dim myStringArray(myString.Length - 1) As String 
For count As Integer = 0 To myString.Length - 1 
    myStringArray(count) = myString.Substring(count, 1) 
Next 

Также, используя нижеследующее, требуется ~ 1200 мс в среднем.

Dim myStringArray(myString.Length - 1) As String 
For count As Integer = 0 To myString.Length - 1 
    myStringArray(count) = myString(count) 
Next 
+0

+1, но в Vb.net, когда вы определяете длину массива, вводимый вами номер является максимальным индексом, а не количеством элементов, поэтому первое должно быть: 'Dim myStringArray (myString.Length - 1) As String' – SysDragon

+0

Я согласен, что это самый эффективный метод, спасибо – Jils

+0

Хорошая точка SysDragon. Ответ отредактирован для отражения. – anothershrubery

1

В верхней части файла:

Imports System.Linq 

А затем y ожно использовать:

Dim myStringArray = myString.Select(Function(c) CStr(c)).ToArray() 
+0

У меня есть «выражение ожидаемое» в «Функция (c)». Я использую VS2005, возможно, его несовместимо. – Jils

+1

Linq доступен только в .Net 3.5 и выше. – anothershrubery

1

Если вы всегда используете один элемент за единицу, я хотел бы предложить вам, чтобы получить массив символов:

Dim myString as String = "TEST" 
Dim myCharArray as Char() = myString.ToCharArray() '<= char array "T"c, "E"c, "S"c, "T"c 

Доступ к вашим гольцов как строки:

For each c as Char in MyCharArray 
    c.ToString() '<= your String 
Next 

Или преобразуйте массив символов в строковый массив:

Dim strings as new List(Of String) 
For each c as Char in MyCharArray 
     strings.add(c.ToString()) 
Next 
strings.ToArray() 
+0

Отлично, Это именно то, что я хочу сделать – Jils

+0

Нет необходимости конвертировать в массив символов сначала, строки реализуют IEnumerable (Of Char). Вы можете просто использовать цикл for со строкой, не обращаясь сначала к массиву символов. См. Ответ Стивена Ликенса. –

0

Проще говоря: строка сама по себе представляет собой массив из Char. Вы можете перебираем строки следующим образом:

For Each character As Char In "TEST" 
    Console.WriteLine(character) 
Next 

Или доступа символы по их индексу:

For position As Integer = 0 To ("TEST".Length - 1) 
    Console.WriteLine("TEST"(position)) 
Next 

Выход:

T 
E 
S 
T 

Вы вообще не необходимо позвонить ToCharArray(), если вы не намерены передать результат функции, которая принимает только входы массива char (e .г. String.Split()).

Также: создание массива строки типа, где каждая строка имеет только 1 символ, просто глупо.

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