2011-01-23 24 views
6

Visual Studio nesne görüntüleyicisini kullanarak dizimin şu olduğunu görüyorum:Bir satırın bir dizede nerede bulunduğunu belirleme:

"_profileIconId = 5\n   elo" 

Metnin başından sonuna kadar olan metni almam gerekiyor.

İşte denedim, ancak IndexOf() yöntemi -1 döndürür, yani yeni satır bulunamadı.

var stringEx = "_profileIconId = 5\n   elo"; 
var x = stringEx.IndexOf(Environment.NewLine); 
stat.Name = tempName.Substring(0,x); 

Bunu nasıl başaracağınıza dair herhangi bir fikir var mı?

+0

Windows üzerinde çalıştırıyor musunuz? –

+0

Windows 7. (dolgu) –

+0

@Sergio CR + LF \ r \ n Windows linebreak vs * nix tek karakterli satır sonlarına ulaşıyordum, ama şimdi bazı yanıtlarınız var! –

cevap

12

Environment.NewLine\r\n'u (satır başı + satır besleme) temsil ettiğinden, kaynak dizinizde yalnızca bir satır beslemeniz vardır. Bu ikinci satırı değiştirin: Windows platformunda çalıştırıyorsanız

var x = stringEx.IndexOf("\n"); 
5

sadece dize ilk satırını istiyorsanız, bunu yapabilirsiniz: Çeşitli hat ara ile

static string GetFirstLine(string text) 
{ 
    using (var reader = new StringReader(text)) 
    { 
     return reader.ReadLine(); 
    } 
} 

StringReader sınıf fırsatlar senaryolar sizin için. the MSDN documentation kaynaktan:

bir çizgi bir hat besleme ("\ n") takip karakter dizisi, bir satır başı ("\ R"), ya da bir satır başı olarak tanımlanır hemen ardından bir satır beslemesiyle ("\ r \ n"). Tabii

, (Ben büyük olduğunu şüpheliyim gerçi) Yeni StringReader nesneyi inşa etmenin yükünü istemiyorsanız, size benzer bir şey kendiniz uygulamak olabilir:

static string GetFirstLine(string text) 
{ 
    int? newlinePos = GetIndex(text, "\r") ?? GetIndex(text, "\n"); 

    if (newlinePos.HasValue) 
    { 
     return text.Substring(0, newlinePos.Value); 
    } 

    return text; 
} 

// Not really necessary -- just a convenience method. 
static int? GetIndex(string text, string substr) 
{ 
    int index = text.IndexOf(substr); 
    return index >= 0 ? (int?)index : null; 
} 
0

İşte genel yoldur dizesinden ondan sonra yeni bir satır ve her şeyi kaldıracağını bunu ancak yeni bir hat dizede varolur olmaz:

int x = stringEx.IndexOf("\n"); 

if (x > 0) { 
    stringEx= stringEx.Remove(x); 
} 
İlgili konular