增强字符串

原创 2003年10月15日 00:07:00

一个自定义类,用于大规模的字符串连接,如拼接SQL语句。用流技术实现的,很好呦!!

using System;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace SuperString
{
 /// <summary>
 /// 创 建 者: superhood
 /// 内容描述: 增强字符串类
 /// </summary>
 public class CSuperString
 {
  /// <summary>
  /// 功能简述: 运算符重载
  /// </summary>
  /// <param name="Left">左参数</param>
  /// <param name="Right">右参数</param>
  /// <returns>文本类</returns>
  public static CSuperString operator + (string Left,CSuperString Right)
  {
   byte[] btyLeft = Encoding.Default.GetBytes(Left);//返回左参数数组
   byte[] btyRight = new Byte[Right.iLength];//返回右参数数组
           
   Right.iTextLength += Left.Length;//设置右参数文本长度
   Right.iLength = btyLeft.Length + btyRight.Length;//设置右参数字节长度
   
   Right.memStrm.Position = 0;//将右参数流位置置0
   Right.memStrm.Read(btyRight,0,btyRight.Length);//将右参数数据读出

   Right.memStrm.Position = 0;//将右参数流位置置0
   Right.memStrm.Write(btyLeft,0,btyLeft.Length);//将字符串(字节数组)写入右参数
   Right.memStrm.Write(btyRight,0,btyRight.Length);//将右参数原有信息写回(加在左参数字符串后)

   return Right;//返回右参数
  }

  /// <summary>
  /// 功能简述: 运算符重载
  /// </summary>
  /// <param name="Left">左参数</param>
  /// <param name="Right">右参数</param>
  /// <returns>文本类</returns>
  public static CSuperString operator + (CSuperString Left,string Right)
  {
   byte[] btyRight = Encoding.Default.GetBytes(Right);//将右参数(字符串)转换为字节数组
   
   Left.memStrm.Position = Left.iLength;//设置左参数流的位置
   Left.memStrm.Write(btyRight,0,btyRight.Length);//将右参数字符串写入流

   Left.iTextLength += Right.Length;//设置左参数文本长度
   Left.iLength += btyRight.Length;//设置左参数字节长度

   return Left;//返回左参数
  }
  
  /// <summary>
  /// 功能简述: 运算符重载
  /// </summary>
  /// <param name="Left">左参数</param>
  /// <param name="Right">右参数</param>
  /// <returns>文本类</returns>
  public static CSuperString operator + (CSuperString Left,CSuperString Right)
  {
   byte[] btyRight = new Byte[Right.iLength];//声明字节数组(右参数)
           
   Right.memStrm.Position = 0;//将右参数流位置置0
   Right.memStrm.Read(btyRight,0,btyRight.Length);//将右参数(字符串)转换为字节数组
   
   Left.memStrm.Position = 0;//将左参数流位置置0
   Left.memStrm.Write(btyRight,0,btyRight.Length);//将右参数字符串写入流
   
   Left.iTextLength += Right.iTextLength;//设置左参数文本长度
   Left.iLength += Right.iLength;//设置左参数字节长度

   return Left;//返回左参数
  }

  /// <summary>
  /// 功能简述: 流中有效字节长度
  /// </summary>
  private int iLength = 0;
  
  /// <summary>
  /// 功能简述: 流中文本长度
  /// </summary>
  private int iTextLength = 0;

  /// <summary>
  /// 功能简述: 内存流
  /// </summary>
  private MemoryStream memStrm;

  /// <summary>
  /// 功能简述: 构造函数
  /// </summary>
  public CSuperString()
  {
    memStrm = new MemoryStream();//初始化流
  }

  /// <summary>
  /// 功能简述: 构造函数
  /// </summary>
  /// <param name="DefaultLength">默认长度(以字节为单位)</param>
  public CSuperString(int DefaultLength)
  {
   memStrm = new MemoryStream(DefaultLength);//初始化流
  }

  /// <summary>
  /// 功能简述: 属性,字节长度
  /// </summary>
  public int Length
  {
   get
   {
    return iLength;
   }
  }

  /// <summary>
  /// 功能简述: 属性,文本长度
  /// </summary>
  public int TextLength
  {
   get
   {
    return iTextLength;
   }
  }

  /// <summary>
  /// 功能简述: 属性,流长度
  /// </summary>
  public int Capacity
  {
   get
   {
    return memStrm.Capacity;
   }
   set
   {
    if (value >= iLength)
     memStrm.Capacity = value;
    else
     memStrm.Capacity = iLength;
   }
  }

  /// <summary>
  /// 功能简述: 向类中添加字符串
  /// </summary>
  /// <param name="Date"></param>
  public void AddString (string Date)
  {
   byte[] btyDate = Encoding.Default.GetBytes(Date);//字符串转换为字节数组
   
   memStrm.Position = iLength;//设置流的位置
   memStrm.Write(btyDate,0,btyDate.Length);//将字符串写入流

   iTextLength += Date.Length;//设置文本长度
   iLength += btyDate.Length;//设置字节长度
  }

  /// <summary>
  /// 功能简述: 返回文本
  /// </summary>
  /// <returns>返回字符串</returns>
  public override string ToString()
  {
   memStrm.Position = 0;//设置流的位置
   byte[] btyDate = new byte[iLength];//声明字节数组
   memStrm.Read(btyDate,0,iLength);//将流内容读入数组
   return Encoding.Default.GetString(btyDate);//将字节数组转换为字符串并返回
  }

  /// <summary>
  /// 功能简述: 将字符串写入文件
  /// </summary>
  /// <param name="FileName">文件名</param>
  public void WriteToFile(string FileName)
  {
   FileStream strm = new FileStream(FileName,FileMode.OpenOrCreate,FileAccess.Write);//初始化文件流
   
   //判断流长度用来确定流中是否有冗余信息
   if (memStrm.Length > iLength)
   {//有
    memStrm.Position = 0;//设置流的位置
   
    byte[] btyDate = new byte[iLength];//声明字节数组
    memStrm.Read(btyDate,0,iLength);//将流内容读入数组
   
    strm.Write(btyDate,0,iLength);//将流内容写入文件
   }
   else
   {//没有
    memStrm.WriteTo(strm);//将流中文本写入文件
   }

   strm.Close();//关闭文件
  }

  /// <summary>
  /// 功能简述: 将字符串写入流
  /// </summary>
  /// <param name="strm">流</param>
  public void WriteToStream(Stream strm)
  {
   //判断流长度用来确定流中是否有冗余信息
   if (memStrm.Length > iLength)
   {//有
    memStrm.Position = 0;//设置流的位置
    byte[] btyDate = new byte[iLength];//声明字节数组
    memStrm.Read(btyDate,0,iLength);//将流内容读入数组
   
    strm.Write(btyDate,0,iLength);//将数组内容写入另一流
   }
   else
   {//没有
    memStrm.WriteTo(strm);//将流中文本写入另一流
   }
  }

  /// <summary>
  /// 功能简述: 清除流
  /// </summary>
  public void Clear()
  {
   iLength = 0;//将流字节长度设为0
   iTextLength = 0;//将流文本长度设为0
  }
 }
}

增强学习系列之(一):增强学习介绍

增强学习介绍
  • superCally
  • superCally
  • 2017年01月27日 09:38
  • 2490

数据增强方法

# -*- coding:utf-8 -*- """数据增强 1. 翻转变换 flip 2. 随机修剪 random crop 3. 色彩抖动 color jittering ...
  • qq_29133371
  • qq_29133371
  • 2017年02月08日 15:18
  • 2374

matlab实现图像增强

下面是根据我自己的工作整理的空间域和频率域的图像增强,首先将彩色图像转化为灰度图像,matlab 代码如下: clear all I1=imread('1.jpg'); ...
  • u011366281
  • u011366281
  • 2016年04月11日 10:42
  • 1703

常用图像算法(图像增强)

常用图像增强算法介绍 1、对数图像增强算法       对数图像增强是图像增强的一种常见方法,其公式为: S = c log(r+1),其中c是常数(以下算法c=255/(log(256)),这样可以...
  • kezunhai
  • kezunhai
  • 2014年11月27日 20:49
  • 8706

opencv-图像增强

图像线性变换 Mat src,dst; src.convertTo(dst,0,alpha,beta); 函数原型: void convertTo( OutputArray m, int r...
  • xdmdth
  • xdmdth
  • 2016年01月14日 09:17
  • 1098

图像对比度增强算法

论述了几种基于灰度直方图的图像对比度增强算法。
  • rongfzh1990
  • rongfzh1990
  • 2017年01月17日 17:53
  • 8793

数学之路-python计算实战(11)-机器视觉-图像增强

目录(?)[+] 在计算机领域中,灰度(Gray scale)数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色...
  • vola9527
  • vola9527
  • 2015年02月25日 14:59
  • 1374

OpenCV,常用图像增强算法的实现

原文地址 http://blog.csdn.net/kezunhai/article/details/41553097 好资料,没收了!!! 1、对数图像增强算法       对数图像增强是图像...
  • EbowTang
  • EbowTang
  • 2016年11月25日 13:49
  • 8745

Java中增强一个类的几种方法

今天有人问我怎么增强一个类的功能。博客刚好没东西,今天就讲讲增强类。 增强的手段有三种类型: 1、继承或者实现接口:特点是被增强对象不能变,增强的内容不能变。 2、装饰着模式:特点是被增强对象可...
  • friday_PJ
  • friday_PJ
  • 2017年06月10日 13:37
  • 1440

OPENCV图像处理提高(一)图像增强

在图像处理学习中会涉及到直方图,直方图很好地表现了图像的灰度信息;同时我们注意到在暗图像中,直方图的分量集中在灰度级的低端;亮图像的灰度值集中在直方图灰度值的高端;低对比度的图像有较窄的直方图,并集中...
  • qq_25819827
  • qq_25819827
  • 2016年07月23日 21:56
  • 1931
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:增强字符串
举报原因:
原因补充:

(最多只允许输入30个字)