2016-04-29 10 views
1

ignoriert ich habe eine ZeichenfolgeWie 1 in meinen Zeichenfolge zu finden, aber -1 C#

string test1 = "255\r\n\r\n0\r\n\r\n-1\r\n\r\n255\r\n\r\n1\r"; 

Ich möchte alle 1 in meinem String finden, aber nicht die -1 ist. Also in meiner Zeichenfolge gibt es nur eine 1. Ich benutze string.Contain("1"), aber das wird zwei 1 finden. Also, wie mache ich das?

+0

Sie wissen, dass Sie 'String test1 = @" 255 \ r \ n \ r \ n 0 \ r \ n \ r \ n-1 \ r verwenden \ n \ r \ n255 \ r \ n \ r \ n1 \ r ";" Wenn Sie nicht wollen, dass der Buchstabe n als neue Zeile interpretiert wird? –

+0

versuchen, jedes Element der Zeichenfolge zu teilen und zu vergleichen – techspider

Antwort

0

Versuchen Sie diese einfache Lösung:

Hinweis: Sie dies leicht zu Erweiterungsmethode umwandeln kann.

static List<int> FindIndexSpecial(string search, char find, char ignoreIfPreceededBy) 
{ 
    // Map each Character with its Index in the String 
    var characterIndexMapping = search.Select((x, y) => new { character = x, index = y }).ToList(); 
    // Check the Indexes of the excluded Character 
    var excludeIndexes = characterIndexMapping.Where(x => x.character == ignoreIfPreceededBy).Select(x => x.index).ToList(); 

    // Return only Indexes who match the 'find' and are not preceeded by the excluded character 
    return (from t in characterIndexMapping 
      where t.character == find && !excludeIndexes.Contains(t.index - 1) 
      select t.index).ToList(); 
} 

Verbrauch:

static void Main(string[] args) 
{ 
    string test1 = "255\r\n\r\n0\r\n\r\n-1\r\n\r\n255\r\n\r\n1\r"; 

    var matches = FindIndexSpecial(test1, '1', '-'); 
    foreach (int index in matches) 
    { 
     Console.WriteLine(index); 
    } 
    Console.ReadKey(); 
} 
1

können Sie verwenden regulären Ausdruck:

string test1 = "255\r\n\r\n0\r\n\r\n-1\r\n\r\n255\r\n\r\n1\r"; 

    // if at least one "1", but not "-1" 
    if (Regex.IsMatch(test1, "(?<!-)1")) { 
    ... 
    } 

das Muster ist genau 1 die durch - nicht vorangestellt wird. Um alle die 1s zu finden:

var matches = Regex 
    .Matches(test1, "(?<!-)1") 
    .OfType<Match>() 
    .ToArray(); // if you want an array 
0

könnten Sie verwenden String.Split und Enumerable.Contains oder Enumerable.Where:

string[] lines = test1.Split(new[] {Environment.NewLine, "\r"}, StringSplitOptions.RemoveEmptyEntries); 
bool contains1 = lines.Contains("1"); 
string[] allOnes = lines.Where(l => l == "1").ToArray(); 

String.Contains sucht nach Sub-Strings in einem String-Instanz. Enumerable.Contains sucht, ob es mindestens eine Zeichenfolge in der string[] gibt, die es entspricht.

Verwandte Themen