2012-03-23 15 views
32

chcę coś tak prostego jak włączenie "this is a test" doPodział ciąg do tablicy ciągów pojedynczych znaków

new string[] {"t","h","i","s"," ","a"," ","t","e","s","t"}

Czy naprawdę muszę coś zrobić jak

test = "this is a test".Select(x => x.ToString()).ToArray();

EDIT: wyjaśnij, nie chcę tablicy znaków, najlepiej chcę tablicę ciągów. Naprawdę nie widzę niczego złego w powyższym kodzie oprócz tego, że myślę, że jest łatwiejszy sposób.

+0

Naprawdę chcesz każdy znak jako ciąg? –

+3

Co jest nie tak z twoim kodem 'var test =" to jest test ". Wybierz (x => x.ToString()). ToArray();'? –

Odpowiedz

72

Wierzę, że to jest to, czego szukasz:

char[] characters = "this is a test".ToCharArray(); 
+8

-1 Myślę, że on chce tablicy string. –

+1

Chociaż nie o to prosiłem, wydaje mi się, że zaczynam rozumieć, że tak naprawdę nie ma powodu, o który prosiłem. – mowwwalker

+0

@Walkerneo Czego naprawdę chcesz? a -1? –

3

Można po prostu użyć String.ToCharArray(), a następnie traktować każdy znak jako ciąg w kodzie.

Oto przykład:

foreach (char c in s.ToCharArray()) 
     Debug.Log("one character ... " +c); 
29

Ciągi w C# mają już indeksowania char

string test = "this is a test"; 
Console.WriteLine(test[0]); 

I. ..

if(test[0] == 't') 
    Console.WriteLine("The first letter is 't'"); 

Działa to zbyt ...

Console.WriteLine("this is a test"[0]); 

I to ...

foreach (char c in "this is a test") 
    Console.WriteLine(c); 

EDIT:

zauważyłem pytanie została zaktualizowana w odniesieniu do tablic char []. Jeśli trzeba mieć string [] tablicy, oto jak podzielić ciąg w każdej postaci w C#:

string[] test = Regex.Split("this is a test", string.Empty); 

foreach (string s in test) 
{ 
    Console.WriteLine(s); 
} 
+0

+1 za trafienie w oczywisty punkt, który przeoczyłem, publikując moją odpowiedź. Duh. Dlaczego o tym nie pomyślałem? – David

+1

Mają one indeksator 'char' i implementują' IEnumerable ', ale w rzeczywistości nie są to' char [] 'lub' IList '. – LukeH

+1

prawda. są one typu string, ale chodzi o to, że deweloper nie musi używać ToCharArray() ani żadnego rodzaju konwersji do napisu [], aby uzyskać dostęp do poszczególnych znaków. –

1

Spróbuj tego:

var charArray = "this is a test".ToCharArray().Select(c=>c.ToString()); 
+1

To już robi kod, który napisałem. – mowwwalker

0

Najprawdopodobniej szukasz sposobu ToCharArray(). Musisz jednak wykonać nieco więcej pracy, jeśli wymagany jest string[], jak zauważyłeś w swoim poście.

string str = "this is a test."; 
    char[] charArray = str.ToCharArray(); 
    string[] strArray = str.Select(x => x.ToString()).ToArray(); 

Edycja: Jeśli martwisz się zwięzłością konwersji, sugeruję, abyś zrobił to metodą rozszerzającą.

public static class StringExtensions 
{ 
    public static string[] ToStringArray(this string s) 
    { 
     if (string.IsNullOrEmpty(s)) 
      return null; 

     return s.Select(x => x.ToString()).ToArray(); 
    } 
} 
+1

Zobacz pytanie OP. Już to zrobił (z krótszym kodem) –

2

Prosty !!
jedna linia:

var res = test.Select(x => new string(x, 1)).ToArray(); 
0

Konwersja wiadomości do tablicy znaków, a następnie użyć pętli for, aby zmienić go na ciąg

string message = "This Is A Test"; 
string[] result = new string[message.Length]; 
char[] temp = new char[message.Length]; 

temp = message.ToCharArray(); 

for (int i = 0; i < message.Length - 1; i++) 
{ 
    result[i] = Convert.ToString(temp[i]); 
} 
Powiązane problemy