2010-09-09 17 views
5

Ayrı sözcüklere bölünmüş dizide txtSearche değerini kaydetmek mümkün mü? BöyleMetin değeri C# sözcükleriyle diziye nasıl bölünür?

txtSearche = "put returns between paragraphs"; 

şey:

StringBuilder sb = new StringBuilder(txtSearche); 

array1 = sb[1] = put 
array2 = sb[2] = returns 
array3 = sb[3] 
array4 = sb[4] 
array5 = sb[5] 

doğru nasıl?

cevap

18

Evet bu deneyin:

string[] words = txtSearche.Split(' '); 

verecek olan:

words[0] = put 
words[1] = returns 
words[2] = between 
words[3] = paragraphs 

DÜZENLEME: Aşağıdaki bahseder Ayrıca olarak Adkins, kelime dizisi gereklidir boyutu ne olursa olsun oluşturulacak sağlanan dizeyle. Listenin dinamik bir boyuta sahip olmasını istiyorsanız, diziyi List wordList = words.ToList();

DÜZENLEME: nakul hemen altında gibi Split() yöntem haline parametreleri olarak ekleyin, bir boşluk ya da daha fazla bölmek:

txtSearche.Split(new string[] { " ", " ", " " }, StringSplitOptions.None); 

veya basitçe tek bir boşlukla bölmek söylemek ve gözardı edebilirsiniz Örneğin Aşağıda

txtSearche.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); 
+1

Ayrıca, kelime dizisinin sağlanan dizgenin gerektirdiği boyutta oluşturulacağı da belirtilmelidir. Listenin dinamik bir boyuta sahip olmasını istiyorsanız, diziyi List wordList = words.ToList (); – Adkins

+0

@Adkins: Teşekkürler – w69rdy

+0

cevabına ekleyeceğim Dizideki ardışık boşluklar ne zaman döneceğini bilmek istiyorum –

4

String.Split'u kullanabilirsiniz.

+0

Ve, evet, aynı zamanda bir 'Join' var. –

2

bir öğe olarak her kelime ile bir diziye dize bölecek şöyle StringSplitOptions.RemoveEmptyEntries enum kullanarak, ardışık boşluklar nedeniyle boş girdiler, ...

string [] words = txtSearche.Split ('');

Burada daha ayrıntılı bilgi herebirden boşluk veya yeni satır yukarıdaki çalışmanın

2

Yok bulabilirsiniz !!!

İşte bunlardan çalışır şudur:

string text = "hi!\r\nI am  a wonderful56 text... \r\nyeah..."; 
string[] words =Regex.Split(text, @"\s+", RegexOptions.Singleline); 

Eğer daha fazla işlem gereklidir ardından üç nokta kaldırmak gerekir ve sana verdiğimden yanı durumunda.

GÜNCELLEME

Aslında bu daha iyidir:

string text = "hi!\r\nI am  a wonderful56 text... \r\nyeah..."; 
MatchCollection matches = Regex.Matches(text, @"[\w\d_]+", RegexOptions.Singleline); 
foreach (Match match in matches) 
{ 
    if(match.Success) 
     Console.WriteLine(match.Value); 
    } 

Çıkışlar:

hi Ben am bir wonderful56 metin evet

+0

Bu tamamen doğru değil, 'String.Split' gerektiren bir aşırı yük var bir dizi bölünmüş karakter ve boş girdileri atlamak için bir seçenek, bu yüzden 'text.Split (" \ t \ r \ n \ x85 \ xA0.,;:!?() - \ "" .Bunu kullanabilirsiniz. ToCharArray() , StringSplitOptions.RemoveEmptyEntries) '. Yine de regex'e gidecekseniz, '@" \ W + (?

1
StringBuilder sb = new StringBuilder(txtSearche); 

var result = sb.Tostring().Split(' '); 
+0

'yeni StringBuilder (txt) .ToString()' = no- op –

0

Eğer daha eksiksiz bir çözüm istiyorsanız ve performans konusunda tam olarak endişelenmiyorsanız, bu tek parçacığın noktalama işaretleri ile ilgilenmesini sağlayın ve size sadece bir dizi kelime verin.

string[] words = Regex.Replace(Regex.Replace(text, "[^a-zA-Z0-9 ]", " "), @"\s+", " ").Split(' '); 
0
private void button1_Click(object sender, EventArgs e) 
{ 
    string s = textBox1.Text;    
    string[] words = s.Split(' ');   
    textBox2.Text = words[0]; 
    textBox3.Text = words[1]; 
} 
İlgili konular