Click here to Skip to main content
Click here to Skip to main content
Add your own
alternative version
Go to top

MycroXaml

, 23 Sep 2004
A Declarative Xml Parser In Less Than 300 Lines Of Code
/*
 * Copyright (c) 2004 MyXaml
 * All Rights Reserved
 * 
 * Licensed under the terms of the GNU General Public License
 * http://www.gnu.org/licenses/licenses.html#GPL
*/

using System;

namespace MycroXaml.Parser
{
	/// <summary>
	/// Helpers for string manipulation.
	/// </summary>
	public class StringHelpers
	{
		/// <summary>
		/// Left of the first occurance of c
		/// </summary>
		/// <param name="src"></param>
		/// <param name="c"></param>
		/// <returns></returns>
		public static string LeftOf(string src, char c)
		{
			int idx=src.IndexOf(c);
			if (idx==-1)
			{
				return src;
			}

			return src.Substring(0, idx);
		}

		/// <summary>
		/// Left of the n'th occurance of c
		/// </summary>
		/// <param name="src"></param>
		/// <param name="c"></param>
		/// <param name="n"></param>
		/// <returns></returns>
		public static string LeftOf(string src, char c, int n)
		{
			int idx=-1;
			while (n != 0)
			{
				idx=src.IndexOf(c, idx+1);
				if (idx==-1)
				{
					return src;
				}
				--n;
			}
			return src.Substring(0, idx);
		}

		/// <summary>
		/// Right of the first occurance of c
		/// </summary>
		/// <param name="src"></param>
		/// <param name="c"></param>
		/// <returns></returns>
		public static string RightOf(string src, char c)
		{
			int idx=src.IndexOf(c);
			if (idx==-1)
			{
				return "";
			}
			
			return src.Substring(idx+1);
		}

		/// <summary>
		/// Right of the n'th occurance of c
		/// </summary>
		/// <param name="src"></param>
		/// <param name="c"></param>
		/// <returns></returns>
		public static string RightOf(string src, char c, int n)
		{
			int idx=-1;
			while (n != 0)
			{
				idx=src.IndexOf(c, idx+1);
				if (idx==-1)
				{
					return "";
				}
				--n;
			}
			
			return src.Substring(idx+1);
		}

		public static string LeftOfRightmostOf(string src, char c)
		{
			int idx=src.LastIndexOf(c);
			if (idx==-1)
			{
				return src;
			}
			return src.Substring(0, idx);
		}

		public static string RightOfRightmostOf(string src, char c)
		{
			int idx=src.LastIndexOf(c);
			if (idx==-1)
			{
				return src;
			}
			return src.Substring(idx+1);
		}

		public static string Between(string src, char start, char end)
		{
			string res=String.Empty;
			int idxStart=src.IndexOf(start);
			if (idxStart != -1)
			{
				++idxStart;
				int idxEnd=src.IndexOf(end, idxStart);
				if (idxEnd != -1)
				{
					res=src.Substring(idxStart, idxEnd-idxStart);
				}
			}
			return res;
		}

		public static int Count(string src, char find)
		{
			int ret=0;
			foreach(char s in src)
			{
				if (s==find)
				{
					++ret;
				}
			}
			return ret;
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Marc Clifton

United States United States
Marc is the creator of two open source projets, MyXaml, a declarative (XML) instantiation engine and the Advanced Unit Testing framework, and Interacx, a commercial n-tier RAD application suite.  Visit his website, www.marcclifton.com, where you will find many of his articles and his blog.
 
Marc lives in Philmont, NY.

| Advertise | Privacy | Mobile
Web03 | 2.8.140916.1 | Last Updated 23 Sep 2004
Article Copyright 2004 by Marc Clifton
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid