2016-11-19 22 views
0

我目前正在研究一個基本程序,但我在選擇字符串變量時遇到了問題。所有的變量都以_開始,然後跟着一串相關的單詞。從文件中篩選字符串變量並對其進行更改

+0

不能將每行存儲爲字符串數組,然後執行'text []。split(delimiter)',它將解析/分割並存儲每個元素你可以在單獨的數組中使用分隔符嗎? –

+0

你的文件結構如何?每行看起來像這樣:'_variableName一些相關的文本'?並比下一行類似。你能舉一個輸入和預期輸出的例子嗎?我認爲使用'String.Split'方法可以很簡單地解決這個問題 –

回答

2

首先,你不需要讀取整個文件並再次保存它那經過的每一行,你可以做,而不是所有的替換然後保存一次循環中。

要進行替換,可以使用正則表達式替換。我不知道你要找對文本做什麼樣的轉變,但你可以做類似如下(在這個例子中,我只是轉換文本爲大寫):

string[] textLines = File.ReadAllLines(@"c:\Users\Darren\Desktop\Hello.txt"); 
var results = new List<string>(); 

foreach(var line in textLines) 
{ 
    var result = Regex.Replace(line, @"_(.*)\s", match => 
     { 
      return $"~{match.Groups[1].Value.ToUpper()} "; 
     }); 
    results.Add(result); 
} 
File.WriteAllLines(@"c:\Users\Darren\Desktop\newHello.txt", results.ToArray()); 

相反return $"~{match.Groups[1].Value.ToUpper()} ";您可以放置​​以您想要的方式轉換文本的代碼。 match.Groups[1].Value將包含_之後和空格之前的文本

-1

沒錯,這段代碼看起來各種各樣的錯誤,我會首先關注讓代碼更高效。毫不費力,你的目標是在特定角色之後找到一個字嗎?

一個簡單的解決方案是沿東西:

var index = input.IndexOf("_"); 
var newString = new string(input[index].TakeWhile(m=>m!=' ').ToArray()); 

將繼續服用字符和下一個字符是一個空字符串停止。這是一種方法。這隻適用於單個變量和單個單詞,因此它的用法非常有限。

解決這個問題的第二種方法是使用正則表達式字符串並使用匹配,然後進行替換。基本字符串會是這樣的

_([a-z])\w+ 

將匹配_接着旁邊一個字,你還可以通過使用{1,N}跟着你想要的金額改進,例如

_([a-z])\w+ {1,3} 

將匹配_Input _hello

相關問題