Как извлечь из другой строки подстроку, состоящую из шести правых букв?
Пример: моя строка "PER 343573". Теперь я хочу извлечь только "343573".
Как я могу это сделать?
Как извлечь из другой строки подстроку, состоящую из шести правых букв?
Пример: моя строка "PER 343573". Теперь я хочу извлечь только "343573".
Как я могу это сделать?
string SubString = MyString.Substring(MyString.Length-6);
Написать метод расширения для выражения функции Right(n);
. Функция должна иметь дело с нулевыми или пустыми строками, возвращающими пустую строку, строками короче максимальной длины, возвращающими исходную строку, и строками длиннее максимальной длины, возвращающими максимальную длину крайних правых символов.
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
}
Не должен выдавать ошибку, возвращает нули в виде пустой строки, возвращает усеченные или базовые значения. Используйте это как «testx». Слева (4) или ул. Право (12);
String mystr = "PER 343573";
String number = mystr.Substring(mystr.Length-6);
РЕДАКТИРОВАТЬ: слишком медленно. , ,
, если вы не уверены в длине вашей строки, но уверены в количестве слов (в данном случае это всегда 2 слова, например, «xxx yyyyyy»), лучше использовать split.
string Result = "PER 343573".Split(" ")[1];
это всегда возвращает второе слово вашей строки.
Это не совсем то, что вы просите, но, просто взглянув на пример, кажется, что вы ищете числовой фрагмент строки.
Если это всегда так, то хорошим способом сделать это было бы использование регулярного выражения.
var regex= new Regex("\n+");
string numberString = regex.Match(page).Value;
Гадание по вашим требованиям, но следующее регулярное выражение даст только 6 буквенно-цифровых символов перед концом строки и не будет совпадать в противном случае.
string result = Regex.Match("PER 343573", @"[a-zA-Z\d]{6}$").Value;
Используйте это:
String text = "PER 343573";
String numbers = text;
if (text.Length > 6)
{
numbers = text.Substring(text.Length - 6);
}
Используйте это:
string mystr = "PER 343573"; int number = Convert.ToInt32(mystr.Replace("PER ",""));
Так как вы используете. NET, который все компилируется в MSIL , просто ссылка Microsoft. VisualBasic и используют встроенный метод Microsoft Strings.Right
:
using Microsoft.VisualBasic;
...
string input = "PER 343573";
string output = Strings.Right(input, 6);
Нет необходимости создавать собственный метод расширения или другую работу. Результат достигается с помощью одной ссылки и одной простой строки кода.
Как дополнительная информация об этом, использование методов Visual Basic с C # было задокументировано в другом месте . Я лично наткнулся на него первым, когда пытался проанализировать файл, и нашел этот поток SO при использовании класса Microsoft.VisualBasic.FileIO.TextFieldParser
чрезвычайно полезным для анализа. CSV-файлы.
Это метод, который я использую: мне нравится, чтобы все было просто.
private string TakeLast(string input, int num)
{
if (num > input.Length)
{
num = input.Length;
}
return input.Substring(input.Length - num);
}
Нулевые безопасные методы:
Строки короче максимальной длины, возвращающие исходную строку
Метод расширения правой строки
public static string Right(this string input, int count) =>
String.Join("", (input + "").ToCharArray().Reverse().Take(count).Reverse());
Метод расширения левой строки
public static string Left(this string input, int count) =>
String.Join("", (input + "").ToCharArray().Take(count));
Другое решение, которое не может быть упомянуто
S.Substring(S.Length < 6 ? 0 : S.Length - 6)
Просто мысль:
public static string Right(this string @this, int length) {
return @this.Substring(Math.Max(@this.Length - length, 0));
}
Вот решение, которое я использую. , , Он проверяет, что длина входной строки не меньше запрашиваемой длины. Решения, которые я вижу выше, не учитывают это, к сожалению, что может привести к сбоям.
///
/// Gets the last x- of characters from the given string. /// If the given string's length is smaller than the requested the full string is returned. /// If the given is negative, an empty string will be returned. ///
///
The string from which to extract the last x- of characters. ///
The amount of characters to return. /// The last x- of characters from the given string. 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); } }
Не прибегая к битовому преобразователю и битовому смещению (нужно быть уверенным в кодировании) это самый быстрый метод, который я использую как метод расширения '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);
}
Я использую Мин для предотвращения негативных ситуаций, а также обрабатывать нулевые строки
//
/// Returns a string containing a specified number of characters from the right side of a string. ///
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; }
using Microsoft.visualBasic;
public class test{
public void main(){
string randomString = "Random Word";
print (Strings.right(randomString,4));
}
}
вывод "Слово"
var str = "PER 343573";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty
: str.Length < 6 ? str
: str.Substring(str.Length - 6); // "343573"
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // "343573"
это поддерживает любое количество символов в str
. альтернативный код не поддерживает null
строку. и первое быстрее, а второе более компактно.
Я предпочитаю второй, если знаю str
, содержащий короткую строку. если это длинная строка, то первая более подходящая.
эл. г.
var str = "";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty
: str.Length < 6 ? str
: str.Substring(str.Length - 6); // ""
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // ""
или
var str = "123";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty
: str.Length < 6 ? str
: str.Substring(str.Length - 6); // "123"
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // "123"
//s - your string
//n - maximum number of right characters to take at the end of string
(new Regex("^.*?(.{1,n})$")).Replace(s,"$1")