singrdk/base/Libraries/System.Web/Util/StringUtil.cs

166 lines
5.1 KiB
C#

////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Note:
// This file was ported, from the Coriolis codebase to Singularity.
//
namespace System.Web.Util
{
using System.Text;
using System.Globalization;
//
// Various string handling utilities
//
internal class StringUtil {
internal static string CheckAndTrimString(string paramValue, string paramName) {
return CheckAndTrimString(paramValue, paramName, true);
}
internal static string CheckAndTrimString(string paramValue, string paramName, bool throwIfNull) {
return CheckAndTrimString(paramValue, paramName, throwIfNull, -1);
}
internal static string CheckAndTrimString(string paramValue, string paramName,
bool throwIfNull, int lengthToCheck) {
if (paramValue == null) {
if (throwIfNull) {
throw new ArgumentNullException(paramName);
}
return null;
}
string trimmedValue = paramValue.Trim();
if (trimmedValue.Length == 0) {
throw new ArgumentException("Tried to trim an empty string");
}
if (lengthToCheck > - 1 && trimmedValue.Length > lengthToCheck) {
throw new ArgumentException("Tried to trim a string that exceeded the maximum length");
}
return trimmedValue;
}
internal static bool Equals(string s1, string s2) {
if (s1 == s2) {
return true;
}
if (IsEmpty(s1) && IsEmpty(s2)) {
return true;
}
return false;
}
internal static bool EqualsIgnoreCase(string s1, string s2) {
if (IsEmpty(s1) && IsEmpty(s2)) {
return true;
}
if (IsEmpty(s1) || IsEmpty(s2)) {
return false;
}
if (s2.Length != s1.Length) {
return false;
}
return 0 == string.Compare(s1, 0, s2, 0, s2.Length, true);
}
internal static bool IsEmpty(string s) {
return s == null || s.Length == 0;
}
//
// Determines if the string ends with the specified character.
// Fast, non-culture aware.
//
internal static bool StringEndsWith(string s, char c) {
int len = s.Length;
return len != 0 && s[len - 1] == c;
}
//
// Determines if the first string ends with the second string.
// Fast, non-culture aware.
//
internal static bool StringEndsWith(string s1, string s2) {
int offset = s1.Length - s2.Length;
if (offset < 0) {
return false;
}
return 0 == string.Compare(s1, offset, s2, 0, s2.Length);
}
//
// Determines if the first string ends with the second string, ignoring case.
// Fast, non-culture aware.
//
internal static bool StringEndsWithIgnoreCase(string s1, string s2) {
int offset = s1.Length - s2.Length;
if (offset < 0) {
return false;
}
return 0 == string.Compare(s1, offset, s2, 0, s2.Length, true);
}
//
// Determines if the string starts with the specified character.
// Fast, non-culture aware.
//
internal static bool StringStartsWith(string s, char c) {
return s.Length != 0 && (s[0] == c);
}
//
// Determines if the first string starts with the second string.
// Fast, non-culture aware.
//
internal static bool StringStartsWith(string s1, string s2) {
if (s2.Length > s1.Length) {
return false;
}
return 0 == string.Compare(s1, 0, s2, 0, s2.Length);
}
//
// Determines if the first string starts with the second string, ignoring case.
// Fast, non-culture aware.
//
internal static bool StringStartsWithIgnoreCase(string s1, string s2) {
if (s2.Length > s1.Length) {
return false;
}
return 0 == string.Compare(s1, 0, s2, 0, s2.Length, true);
}
internal static bool StringArrayEquals(string[] a, string [] b) {
if ((a == null) != (b == null)) {
return false;
}
if (a == null) {
return true;
}
int n = a.Length;
if (n != b.Length) {
return false;
}
for (int i = 0; i < n; i++) {
if (a[i] != b[i]) {
return false;
}
}
return true;
}
}
}