只从string中提取最右边的n个字母
如何提取由另一个string中最右边的六个字母组成的子string?
例如:我的string是“PER 343573”。 现在我只想提取“343573”。
我怎样才能做到这一点?
string SubString = MyString.Substring(MyString.Length-6);
写一个扩展方法来表示Right(n);
function。 该函数应该处理返回空string的空或空string,比返回原始string的最大长度短的string,以及比最大长度长的string,返回最右边字符的最大长度。
public static string Right(this string sValue, int iMaxLength) { //Check if the value is valid if (string.IsNullOrEmpty(sValue)) { //Set valid empty string as string could be null sValue = string.Empty; } else if (sValue.Length > iMaxLength) { //Make the string no longer than the max length sValue = sValue.Substring(sValue.Length - iMaxLength, iMaxLength); } //Return the string return sValue; }
可能更好使用扩展方法:
public static class StringExtensions { public static string Right(this string str, int length) { return str.Substring(str.Length - length, length); } }
用法
string myStr = "ABCDEPER 343573"; string subStr = myStr.Right(6);
using System; public static class DataTypeExtensions { #region Methods public static string Left(this string str, int length) { str = (str ?? string.Empty); return str.Substring(0, Math.Min(length, str.Length)); } public static string Right(this string str, int length) { str = (str ?? string.Empty); return (str.Length >= length) ? str.Substring(str.Length - length, length) : str; } #endregion }
不应该错误,将空值返回为空string,返回修剪或基本值。 使用它像“testx”.Left(4)或str.Right(12);
MSDN
String mystr = "PER 343573"; String number = mystr.Substring(mystr.Length-6);
编辑:太慢…
这不完全是你所要求的,但看看这个例子,看来你正在寻找string的数字部分。
如果情况总是如此,那么一个好的方法就是使用正则expression式。
var regex= new Regex("\n+"); string numberString = regex.Match(page).Value;
如果你不确定string的长度,但是你确定字数(在这个例子中总是2个字,比如'xxx yyyyyy'),你最好使用split。
string Result = "PER 343573".Split(" ")[1];
这总是返回你的string的第二个字。
用这个:
String text = "PER 343573"; String numbers = text; if (text.Length > 6) { numbers = text.Substring(text.Length - 6); }
按照您的要求猜测,但是下面的正则expression式只会在string结束之前产生6个字母数字,否则就不会匹配。
string result = Regex.Match("PER 343573", @"[a-zA-Z\d]{6}$").Value;
用这个:
string mystr = "PER 343573"; int number = Convert.ToInt32(mystr.Replace("PER ",""));
这是我使用的解决scheme…它检查inputstring的长度不低于要求的长度。 我在上面看到的解决scheme并不考虑这个问题 – 这可能会导致崩溃。
/// <summary> /// Gets the last x-<paramref name="amount"/> of characters from the given string. /// If the given string's length is smaller than the requested <see cref="amount"/> the full string is returned. /// If the given <paramref name="amount"/> is negative, an empty string will be returned. /// </summary> /// <param name="string">The string from which to extract the last x-<paramref name="amount"/> of characters.</param> /// <param name="amount">The amount of characters to return.</param> /// <returns>The last x-<paramref name="amount"/> of characters from the given string.</returns> public static string GetLast(this string @string, int amount) { if (@string == null) { return @string; } if (amount < 0) { return String.Empty; } if (amount >= @string.Length) { return @string; } else { return @string.Substring(@string.Length - amount); } }
由于您使用.NET编译为MSIL ,只需引用Microsoft.VisualBasic ,并使用Microsoft内置的Strings.Right
方法 :
using Microsoft.VisualBasic; ... string input = "PER 343573"; string output = Strings.Right(input, 6);
无需创build自定义扩展方法或其他工作。 结果是通过一个参考和一个简单的代码行来实现的。
有关这方面的进一步信息,使用C#的Visual Basic方法已在其他地方logging 。 我个人试图parsing一个文件时,第一次遇到了这个问题 ,并发现这个SO线程使用Microsoft.VisualBasic.FileIO.TextFieldParser
类对parsing.csv文件非常有用。
我使用Min来防止负面情况,并处理空string
// <summary> /// Returns a string containing a specified number of characters from the right side of a string. /// </summary> public static string Right(this string value, int length) { string result = value; if (value != null) result = value.Substring(0, Math.Min(value.Length, length)); return result; }
这是我使用的方法:我喜欢保持简单。
private string TakeLast(string input, int num) { if (num > input.Length) { num = input.Length; } return input.Substring(input.Length - num); }
using Microsoft.visualBasic; public class test{ public void main(){ string randomString = "Random Word"; print (Strings.right(randomString,4)); } }
输出是“Word”
另一个解决scheme可能没有提到
S.Substring(S.Length < 6 ? 0 : S.Length - 6)
不使用位转换器和位移(需要确定编码),这是我用作“Right”扩展方法的最快方法。
string myString = "123456789123456789"; if (myString > 6) { char[] cString = myString.ToCharArray(); Array.Reverse(myString); Array.Resize(ref myString, 6); Array.Reverse(myString); string val = new string(myString); }