【问题标题】:Find those lines which contains text查找那些包含文本的行
【发布时间】:2018-11-27 13:05:00
【问题描述】:

我需要找出两个文本文件的哪一行是我最长的文本片段。我找到了,但我不知道如何找到我的文本片段在哪几行中。也许我需要以某种方式更改我的 ReadFile 方法?

string[] Fragment(string[] wordsWithSeparatos1, string[] wordsWithSeparators2)
{
    int place = 0;
    string[] fragment = new string[1000];
    for (int i = 0; i < wordsWithSeparatos1.Length; i++)
    {
        for (int j = 0; j < wordsWithSeparators2.Length; j++)
        {
            if (wordsWithSeparatos1[i] == wordsWithSeparators2[j])
            {
                fragment[place] += wordsWithSeparatos1[i] + ' ' ;
                i++;
            }
            else
            {
                if (fragment[place] != null)
                {
                    place++;
                }
            }
        }
    }
    return fragment;
}

void LongestFragment(string[] fragment)
{
    foreach (var item in fragment.OrderByDescending(x => fragment.Length).Take(1))
    {
        Console.WriteLine(item);
    }
}

string[] ReadFile(string fn)
{
    char[] space = { ' ' };
    string lines = File.ReadAllText(fn, Encoding.GetEncoding(1257));
    string[] wordsWithSeparators = new string[1000];
    wordsWithSeparators = lines.Split(space, StringSplitOptions.RemoveEmptyEntries);
    return wordsWithSeparators;
}

文本1.txt: Lorem Ipsum 只是印刷和排版行业的虚拟文本。 自 1500 年代以来,Lorem Ipsum 一直是行业的标准虚拟文本,当时一位不知名的印刷商采用了一种类型的厨房并将其加扰以制作类型样本书。 它不仅经历了五个世纪,而且经历了电子排版的飞跃,基本保持不变。 它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而得到普及,最近又随着 Aldus PageMaker 等桌面出版软件(包括 Lorem Ipsum 的版本)而普及。 文本2.txt: Lorem Ipsum 只是印刷和排版行业的虚拟文本。 自 1500 年代以来,Lorem Ipsum 一直是行业的标准虚拟文本,当时一位不知名的印刷商采用了一种类型的厨房并将其加扰以制作类型样本书。

【问题讨论】:

  • 您的行有 \r\n 或 \n 行尾字符?
  • 不,不是。我会尽快上传文本文件
  • 好的,我看到你在字符串中加载了所有文本文件,但是如果你的文本没有 eol,你只有一行??
  • 现在是的。我想我需要使用 File.ReadAllLines。在第一个文本文件中我有 4 行,在第二个 2
  • 是的,您通过读取和拆分每一行来修改程序的逻辑,并将拆分结果添加到 list (您使用 File.ReadLine 方法)。因此,每次片段较长时,您都可以保留行数或内容

标签: c#


【解决方案1】:

一个解决方案的例子:(代码很容易理解) 你捕获最长的片段和包含它的行

       string keeplineoflongestfrag="";
       string stlongestfrag="";
       int longestfrag = 0;

       using (StreamReader file = new StreamReader((filepath, System.Text.Encoding.Default))
        {

            string line;
            char[] space = { ' ' };
            while ((line = file.ReadLine()) != null)
            {
                var wordsWithSeparators = lines.Split(space, StringSplitOptions.RemoveEmptyEntries);
                bool modify = false
                foreach(var lg in wordsWithSeparators)
                {
                    if (lg.Length > longestfrag)
                    {
                        longestfrag = lg.Length;
                        stlongestfrag = lg;
                        if (!modify)
                        {
                            keeplineoflongestfrag= line ;
                            modify = true;
                        }
                    }
                }
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    相关资源
    最近更新 更多