从文本文件中查找字符串中包含10个以上字母的所有单词

时间:2015-01-08 14:11:50

标签: c# string

在下面我写了代码,成功检查我输入的文本文件中是否包含字符“A”。它根据结果返回yes或no。但是,现在我想列出所有大于10个字符的单词。请注意,我在阅读字符串时使用ReadAllText。因此整个文本文件在同一个字符串中。我正在寻找思考方式而不是烤箱准备代码。谢谢大家!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace TESTING
{
    class Testing
    {
        static void Main(string[] args)
        {
            //ask user for the filename
            string userInput = fetchFileName("Enter the textfile you want to view: ");

            //test if the filename writes anything to console
            string fileContents = File.ReadAllText(userInput);

            string theFileContents = analyseFile(fileContents);
            //Console.WriteLine(theFileContents);
            Console.ReadLine();         
        }

       private static string analyseFile(string fileContents)
       {
            string str = fileContents;
            if (str.Contains("A"))                
            {
               Console.WriteLine("YES");                   
            }
            else
            {
                Console.WriteLine("NO");
            }
            return str;
       }

       private static string fetchFileName(string askFileName)
       {
            Console.WriteLine(askFileName);
            string userAnswer = Console.ReadLine();
            return userAnswer;
       }
    }
}

5 个答案:

答案 0 :(得分:4)

由于您的文件位于字符串中,因此您可以使用string的{​​{3}}方法将其转换为标记(“字”):

var tokens = fileContents.Split(' ', '\t', '\n', '\r');

掌握一系列令牌,使用您喜欢的过滤技术,只保留10个字符的单词。 C#提供了许多选择 - 您可以使用for循环,foreach循环或使用LINQ提供的Split扩展方法。

答案 1 :(得分:2)

使用String.Split(' ')将文件内容拆分为单词,然后检查然后对结果数组进行LINQ查询,返回每个单词的长度> 10。

STH。像这样:

string fileContents = File.ReadAllText(userInput);
var result = fileContents.Split(' ').Where(x => x.Length > 10);

答案 2 :(得分:0)

使用Split,如下所示:

ArrayList ar=new ArrayList(); // list of strings with the lenghth of greater than 10
String[] userInputWords=userInput.Split(' ', '\t', '\n', '\r');
foreach(String str in userInputWords){
   if (str.Length()>10){
      ar.add(str);
   }
}

答案 3 :(得分:0)

这应该有效但未经过测试

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test1
{
    class Program
    {
        static void Main(string[] args)
        {
            //ask user for the filename
            string userInput = fetchFileName("Enter the textfile you want to view: ");

            //test if the filename writes anything to console
            string fileContents = File.ReadAllText(userInput);

            string theFileContents = analyseFile(fileContents);
            //   Console.WriteLine(theFileContents);

            foreach (var item in tenOrMore(fileContents))
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }

        private static IEnumerable<string> tenOrMore(string fileContents)
        {
            foreach (var item in fileContents.Split(' ', '\t', '\n', '\r'))
            {
                if (item.Length.CompareTo(10) > 0)
                {
                    yield return item;
                }
            }
        }

        private static string analyseFile(string fileContents)
        {
            string str = fileContents;
            if (str.Contains("A"))
            {
                Console.WriteLine("YES");

            }
            else
            {
                Console.WriteLine("NO");
            }
            return str;
        }

        private static string fetchFileName(string askFileName)
        {
            Console.WriteLine(askFileName);
            string userAnswer = Console.ReadLine();
            return userAnswer;
        }
    }
}

答案 4 :(得分:0)

另一种更天真的方式是每次遇到不是空白字符的字符串时从字符串和增量字母计数器的开头开始。

当你遇到空格时,看看字母计数器是否是&gt; 10.如果是,则该单词超过10个字符。将字母计数器重置为0并继续搜索单词,直到文件结束。

这种方法的优点是不会进行拆分和额外的字符串分配,对于包含很多单词的大型文件来说可能会有很多工作。

伪代码:

letterCount = 0
wordCount = 0
letter = GetNextLetter()

while (isNotEndOfFile())
{
    if (notAWhitespace(letter))
    {
        letterCount++
    }
    else
    {
        if (letterCount > 10) { wordCount++ }
        letterCount=0
    }
    letter = GetNextLetter()
}
if (letterCount > 10) { wordCount++ }