2010-09-22 4 views
0

j'ai ci-dessous morceau de code avec moi spliting iam les mots en utilisant un seul espace et la sortie estC# mots extraction

sortie:

when 
ambition 
ends 
happiness 
begins

Mais je veux diviser les mots après deux espaces Je veux dire ma sortie devrait ressembler à ceci:

 
when ambition 
ends happiness 
begins 
string vj = "when ambiton ends happiness begins"; 
List<string> k = new List<string>(); 
char ch = ' '; 
string[] arr = vj.Split(ch); 
foreach (string r in arr) 
{ 
    Response.Write(r + "<br/>"); 
} 

Répondre

0
string vj = "when ambiton ends happiness begins"; 
List<string> k = new List<string>(); 
char ch = ' '; 
string[] arr = vj.Split(ch); 
bool flag=false; 

foreach (string r in arr) 
{ 
if(flag) 
    { 
    Response.Write(r + "<br/>"); 
    flag=false; 
    } 
else 
    { 
    Response.Write(r + " "); 
    flag=true; 
    } 
} 

Ce qui précède est bon pour le cas que vous avez spécifié (sauter un seul espace).


Bien que pas nécessaire, mais si vous voulez tout enveloppé, ici:

string myString = "when ambiton ends happiness begins"; 

bool flag=false; 

foreach (string item in myString.Split(ch)) 
     Response.Write(item + flag=!flag?" ":"<br/>"); 
+0

Qu'est-ce que 'List k' pour? Votre variable nommage m'a rappelé mon professeur d'informatique, qui a presque crié à quelqu'un pour les variables nommées comme a, b, v, ... :) –

+0

... Puisque vous avez déjà dit la réponse .. Pourquoi ne pas flag =! Flag? –

+0

Merci beaucoup ... – user347640

0

Yo Il va falloir passer au manuel sur celui-ci, en cherchant l'espace-caractère dans la chaîne, et en gardant un compteur. Vous devrez vous souvenir des indices des espaces-caractères que vous voulez séparer, et utiliser la méthode .Substring (startindex, length) pour extraire les parties séparées.

+0

J'sais à ce sujet L'OP a déjà divisé cela signifie juste que l'OP doit passer deux jetons à un. (Ne pas utiliser foreach) –

+0

Vous pouvez bien sûr les diviser comme dans l'exemple, et les coller de nouveau ensemble, si vous n'avez pas peur des petites créations supplémentaires. –

2

Comme cela est marqué devoirs, je vais donner un indice:

  • Gardez un compteur pour combien de places vous faire voulez dans chaque ligne
  • ce compteur lorsque le nombre de places est atteint
  • Lorsque
  • nombre de places est atteint, ajouter un saut de ligne
1

de Split comme vous le faites en ce moment, puis boucler la matrice résultante et les joindre à tout à l'aide une boucle standard for.

+0

pourquoi créer autant de travail, wen seul un petit index suffira? – loxxy

+0

@loxxy: Codage sage c'est peu de travail, mais la performance sage je suppose que cela pourrait être mieux. Pas que je pense que la performance est un problème ici ... –

0
  1. Créer une variable contenant la position de début de mots pour extraire
  2. Créer un compteur d'espace
  3. Boucle par carbonisation de charbon (en utilisant un indexeur)
  4. Lorsque le nombre d'espaces est égal à deux, la méthode de sous-chaîne d'appel de la position enregistrée dans # 1 à l'index actuel.
  5. Modifier la variable de # 1 à l'index actuel.
0

Vous pouvez simplement ajouter un bool indiquant si oui ou non vous devez ajouter «/br », appelez lignes de rupture .
Maintenant, à chaque itération, vérifiez si c'est vrai - si c'est le cas, ajoutez "/ br", sinon ne le faites pas. finalement le nier à chaque itération.
La mise en œuvre est laissée en exercice (-:.

2

est ici une solution avec des expressions régulières:

// Loosely: a word, followed by another word if available 
Regex regex = new Regex(@"\S+(\S+)?"); 

string[] splits = regex.Matches(inputText) 
         .Cast<Match>() 
         .Select(match => match.Value) 
         .ToArray(); 
+0

+1 pour la créativité. Mais vous avez vu ses devoirs, n'est-ce pas? –

+0

Merci beaucoup – user347640

+0

désolé son travail à la maison im peu débutant à cela et travaillant sur le projet de data mining donc coincé ici, donc j'avais besoin d'aide. – user347640