2015-09-27 3 views
1

У меня проблема:Части строки в массив

Я хочу взять части строки в массив. Пока нет проблем (splitstring), , но я не могу использовать splitstring, потому что он выводит моих операторов.

Разъяснения на примере:
После строки: "47-62*5141"
мне это нужно так: {"47", "-", "62", "*", "5141"}

Если бы вы могли дать мне пример кода, я был бы очень рад!

+1

Пожалуйста, покажите, что вы пробовали до сих пор, добавить некоторые фрагменты кода. – W3hri

ответ

2

Просто разделить по границе слова, которые существуют в середине.

Regex.Split(string, @"(?!^)\b(?!$)"); 

DEMO

+1

или совпадение слов и символов, отличных от слов '@" \ w + | \ W + "' –

0

Я сделал немного uglycode. Но это работает.

class Program 
{ 
    static void Main(string[] args) 
    { 
     var text = "47-62**5141"; 

     var splittedText = text.SplitAndKeepSeparator('-', '*'); 

     foreach (var part in splittedText) 
     { 
      Console.WriteLine(part); 
     } 
     Console.ReadLine(); 
    } 

} 

public static class StringExtensions 
{ 
    public static IEnumerable<string> SplitAndKeepSeparator(this string s, params char[] seperators) 
    { 
     var parts = s.Split(seperators, StringSplitOptions.None); 

     var partIndex = 0; 
     var isPart = true; 
     var indexInText = 0; 
     while (partIndex < parts.Length) 
     { 
      if (isPart) 
      { 
       var partToReturn = parts[partIndex]; 

       if (string.IsNullOrEmpty(partToReturn)) 
       { 
        partToReturn = s[indexInText].ToString(); 
       } 
       else 
       { 
        isPart = false; 
       } 
       indexInText += partToReturn.Length; 
       partIndex++; 

       yield return partToReturn; 
      } 
      else 
      { 
       var currentSeparator = s[indexInText]; 
       indexInText++; 
       isPart = true; 
       yield return currentSeparator.ToString(); 
      } 
     } 
    } 
+0

Спасибо вам, брат! – Shaya

+0

добро пожаловать! – Andection

0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] parts = new string[100]; 

      var text = "47-62*5141"; 
      int i = 0; 

      var splittedText = text.SplitAndKeepSeparator('-', '*', '+', '/'); 

      foreach (var part in splittedText) 
      { 
        parts[i] = part; 
        i++; 

      } 
      Console.ReadLine(); 
      Console.WriteLine(parts[0]); 
      Console.WriteLine(parts[1]); 
      Console.WriteLine(parts[2]); 
      Console.WriteLine(parts[3]); 
      Console.ReadLine(); 
     } 
    } 
} 
public static class StringExtensions 
{ 
    public static IEnumerable<string> SplitAndKeepSeparator(this string s, params char[] seperators) 
    { 
     var parts = s.Split(seperators, StringSplitOptions.None); 

     var partIndex = 0; 
     var isPart = true; 
     var indexInText = 0; 
     while (partIndex < parts.Length) 
     { 
      if (isPart) 
      { 
       var partToReturn = parts[partIndex]; 

       if (string.IsNullOrEmpty(partToReturn)) 
       { 
        partToReturn = s[indexInText].ToString(); 
       } 
       else 
       { 
        isPart = false; 
       } 
       indexInText += partToReturn.Length; 
       partIndex++; 

       yield return partToReturn; 
      } 
      else 
      { 
       var currentSeparator = s[indexInText]; 
       indexInText++; 
       isPart = true; 
       yield return currentSeparator.ToString(); 
      } 
     } 
    } 
}