簡體   English   中英

使用StreamReader C#將單個單詞讀入數組

[英]Reading individual words into an array using streamreader C#

我正在嘗試獲取要放入數組的單詞列表(如下)。 我希望每個詞都在其自己的索引中。

這是我到目前為止的代碼。

string badWordsFilePath = openFileDialog2.FileName.ToString();
StreamReader sr = new StreamReader(badWordsFilePath);
string line = sr.ReadToEnd();
string[] badWordsLine = line.Split(' ');
int BadWordArrayCount = 0;
foreach (string word in badWordsLine)
{
    badWords[BadWordArrayCount] = word;
    BadWordArrayCount = BadWordArrayCount + 1;
}
int test = badWords.Length;
MessageBox.Show("Words have been imported!");
BadWordsImported = true;

這是我要導入的單詞列表。

label
invoice
post
document
postal
calculations
copy
fedex
statement
financial
dhl
usps
8
notification
n
irs
ups
no
delivery
ticket

如果有人可以給我一個如何使其工作的例子,那將是巨大的幫助。

簡化代碼:

string badWordsFilePath = openFileDialog2.FileName.ToString();
string[] badWords = File.ReadAllLines(badWordsFilePath);
int test = badWords.Length;
MessageBox.Show("Words have been imported!");
BadWordsImported = true;

如果每個單詞都以新行開頭,則無需創建for循環。 Split方法將為您轉換為數組。

string badWordsFilePath = openFileDialog2.FileName.ToString();
StreamReader sr = new StreamReader(badWordsFilePath);
string line = sr.ReadToEnd();

string[] badWords = line.Split('\n');

您正在分割空間,但每個單詞之間都有一個換行符。 在換行符上拆分:

string[] badWordsLine = line.Split(new string[]{ Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

然后,您必須創建數組以將單詞放入:

badWords = new string[badWordsLine.Length];

但是,僅通過將字符串復制到字符串數組來遍歷字符串數組似乎毫無意義。 只是將字符串數組關聯到變量。 另外,您忘記了關閉流閱讀器,最好using塊來注意這一點:

string badWordsFilePath = openFileDialog2.FileName.ToString();
string line;
using (StreamReader sr = new StreamReader(badWordsFilePath)) {}
  line = sr.ReadToEnd();
}
badWords = line.Split(new string[]{ Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
int test = badWords.Length;
MessageBox.Show("Words have been imported!");
BadWordsImported = true;

也許嘗試這種修改? 它允許在各種空白處進行分割。

     string badWordsFilePath = openFileDialog2.FileName.ToString();
            StreamReader sr = new StreamReader(badWordsFilePath);
            string line = sr.ReadToEnd();
            string[] badWordsLine = line.Split(new string[] {" ", "\t", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
            int BadWordArrayCount = 0;
            foreach (string word in badWordsLine)
            {
                badWords[BadWordArrayCount] = word;
                BadWordArrayCount = BadWordArrayCount + 1;
            }
            int test = badWords.Length;
            MessageBox.Show("Words have been imported!");
            BadWordsImported = true;

您必須使用StreamReader嗎? 如果您不必這樣做,那么此代碼更清晰(我認為)。

string text = File.ReadAllText(badWordsFilePath);
string[] words = Regex.Split(text, @"\s+");

如果您100%確信每個單詞都在自己的行上並且沒有空行,那么這可能是過大的; @Ulugbek Umirov提出的File.ReadAllLines建議更為簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM