blob: 0e333f33543207686ad54b81086100fae4620ebf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//-------------------------------------------------------------------------------------------
// Copyright © 2007 - 2014 Tangible Software Solutions Inc.
// This class can be used by anyone provided that the copyright notice remains intact.
//
// This class is used to convert some aspects of the Java String class.
//-------------------------------------------------------------------------------------------
using System.Runtime.InteropServices;
namespace Lucene.Net.Codecs
{
internal static class StringHelperClass
{
//----------------------------------------------------------------------------------
// This method replaces the Java String.substring method when 'start' is a
// method call or calculated value to ensure that 'start' is obtained just once.
//----------------------------------------------------------------------------------
internal static string SubstringSpecial(this string self, int start, int end)
{
return self.Substring(start, end - start);
}
//------------------------------------------------------------------------------------
// This method is used to replace calls to the 2-arg Java String.startsWith method.
//------------------------------------------------------------------------------------
internal static bool StartsWith(this string self, string prefix, int toffset)
{
return self.IndexOf(prefix, toffset, System.StringComparison.Ordinal) == toffset;
}
//------------------------------------------------------------------------------
// This method is used to replace most calls to the Java String.split method.
//------------------------------------------------------------------------------
internal static string[] Split(this string self, string regexDelimiter, bool trimTrailingEmptyStrings)
{
string[] splitArray = System.Text.RegularExpressions.Regex.Split(self, regexDelimiter);
if (trimTrailingEmptyStrings)
{
if (splitArray.Length > 1)
{
for (int i = splitArray.Length; i > 0; i--)
{
if (splitArray[i - 1].Length > 0)
{
if (i < splitArray.Length)
System.Array.Resize(ref splitArray, i);
break;
}
}
}
}
return splitArray;
}
#region These methods are used to replace calls to some Java String constructors.
internal static string NewString(sbyte[] bytes)
{
return NewString(bytes, 0, bytes.Length);
}
internal static string NewString(sbyte[] bytes, int index, int count)
{
return System.Text.Encoding.UTF8.GetString((byte[]) (object) bytes, index, count);
}
internal static string NewString(sbyte[] bytes, string encoding)
{
return NewString(bytes, 0, bytes.Length, encoding);
}
internal static string NewString(sbyte[] bytes, int index, int count, string encoding)
{
return System.Text.Encoding.GetEncoding(encoding).GetString((byte[]) (object) bytes, index, count);
}
#endregion
#region These methods are used to replace calls to the Java String.getBytes methods.
internal static sbyte[] GetBytes(this string self)
{
return GetSBytesForEncoding(System.Text.Encoding.UTF8, self);
}
internal static sbyte[] GetBytes(this string self, string encoding)
{
return GetSBytesForEncoding(System.Text.Encoding.GetEncoding(encoding), self);
}
private static sbyte[] GetSBytesForEncoding(System.Text.Encoding encoding, string s)
{
var sbytes = new sbyte[encoding.GetByteCount(s)];
encoding.GetBytes(s, 0, s.Length, (byte[]) (object) sbytes, 0);
return sbytes;
}
#endregion
}
}