zoukankan      html  css  js  c++  java
  • 使用自定义的行分隔符,从StreamReader中读取一行字符串

    在C#中,StreamReader的ReadLine方法是不支持自定义行分隔符的。这导致很多文本文件的行分隔符如果不是" "和" ",那么使用StreamReader就无法正确读取到一行字符串。

    所以我们这里采用一个.NET Core控制台项目,自定义一个ReadLineWithDelimiter扩展方法,演示使用自定义的行分隔符,从StreamReader中读取一行字符串,代码如下:

    using System;
    using System.IO;
    using System.Text;
    
    namespace NetCoreReadline
    {
        /// <summary>
        /// StreamReader扩展类
        /// </summary>
        public static class StreamReaderExtension
        {
            /// <summary>
            /// 使用自定义的行分隔符,从StreamReader中读取一行字符串
            /// </summary>
            /// <param name="streamReader">StreamReader类对象实例</param>
            /// <param name="delimiter">自定义的行分隔符</param>
            /// <returns>从StreamReader中读取的一行字符串</returns>
            public static string ReadLineWithDelimiter(this StreamReader streamReader, string delimiter)
            {
                StringBuilder sb = new StringBuilder();
    
                if (delimiter == null)
                {
                    throw new ArgumentNullException("delimiter");
                }
    
                if (delimiter == string.Empty && !streamReader.EndOfStream)
                {
                    return ((char)streamReader.Read()).ToString();
                }
    
                while (!streamReader.EndOfStream)
                {
                    char currentChar = (char)streamReader.Read();//如果StreamReader采用的是支持中文的编码,例如Encoding.UTF8,那么这里读取到的字符char类型也会是中文,不会是乱码
                    sb.Append(currentChar);
    
                    //表示StreamReader读取到一个完整的行分隔符了
                    if (sb.ToString().EndsWith(delimiter))
                    {
                        sb.Remove(sb.Length - delimiter.Length, delimiter.Length);
                        break;
                    }
                }
    
                return sb.ToString();
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                string filepath = AppDomain.CurrentDomain.BaseDirectory + "Data\RawData.txt";
    
                using (StreamReader streamReader = new StreamReader(filepath, Encoding.UTF8))
                {
                    while (!streamReader.EndOfStream)
                    {
                        string lineText = streamReader.ReadLineWithDelimiter("||");//定义"||"为行分隔符
    
                        Console.WriteLine("StreamReader 读到一行字符串:"{0}"", lineText);
                    }
                }
    
                Console.WriteLine("按任意键结束程序...");
                Console.ReadKey();
            }
        }
    }

    我们在Program类的Main方法中,使用了自定义的行分隔符"||",来从StreamReader中读取每一行字符串。

    其中读取的文本文件"RawData.txt"为UTF-8编码,其文本内容如下所示:

    昨天天气不错ABC||今天天气不错EFG||明天天气不错HIJ

    按照行分隔符"||",该文本文件就有三行字符串。

    最终,程序运行的结果,如下所示:

    所以,我们可以看到三行字符串都被正确地读取出来了。

    参考文献:

    C# StreamReader, “ReadLine” For Custom Delimiters

  • 相关阅读:
    4.数据库表相关操作
    2.快速创建springboot项目 连pom文件里面的配置都不用配了
    1.开始Springboot 基本配置和helloworld
    mysql 对数据库操作的常用sql语句
    mysql简单操作
    1.开始Spring
    关于java中的异常
    关于maven
    npm相关知识点
    git源代码管理工具操作步骤
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/12298475.html
Copyright © 2011-2022 走看看