quicksearch.cs

来自「没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没」· CS 代码 · 共 110 行

CS
110
字号
//// assembly:	System// namespace:	System.Text.RegularExpressions// file:	quicksearch.cs//// Authors:	Dan Lewis (dlewis@gmx.co.uk)//		Juraj Skripsky (juraj@hotfeet.ch)//// (c) 2002 Dan Lewis// (c) 2003 Juraj Skripsky//using System;using System.Collections;namespace System.Text.RegularExpressions {	class QuickSearch {		// simplified boyer-moore for fast substring matching		// (for short strings, we use simple scans)			public QuickSearch (string str, bool ignore) {			this.str = str;			this.len = str.Length;			this.ignore = ignore;			if (ignore)				str = str.ToLower ();			// create the shift table only for "long" search strings			if(len > THRESHOLD)				SetupShiftTable ();		}				public string String {			get { return str; }		}		public int Length {			get { return len; }		}		public bool IgnoreCase {			get { return ignore; }		}		public int Search (string text, int start, int end) {			int ptr = start;			// use simple scan for a single-character search string			if (len == 1) {				while (ptr <= end) {					if(str[0] == GetChar(text[ptr]))						return ptr;					else						ptr++;				}				return -1;			}			if (end > text.Length - len)				end = text.Length - len;			while (ptr <= end) {				int i = len - 1;				while (str[i] == GetChar(text[ptr + i])) {					if (-- i < 0)						return ptr;				}				if (ptr < end)					ptr += GetShiftDistance (text[ptr + len]);				else					break;			}			return -1;		}		// private		private void SetupShiftTable () {			shift = new Hashtable ();			for (int i = 0; i < len; ++ i) {				char c = str[i];				shift[GetChar(c)] = len - i;			}		}	    		private int GetShiftDistance (char c) {			if(shift == null)				return 1;			object s = shift[c];			return (s != null ? (int)s : len + 1);		}		private char GetChar(char c) {			return (!ignore ? c : Char.ToLower(c));		}				private string str;		private int len;		private bool ignore;		private Hashtable shift;		private readonly static int THRESHOLD = 5;	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?