Извлечь только правильные большинство n букв из строки - PullRequest
98 голосов
/ 12 ноября 2009

Как извлечь из другой строки подстроку, состоящую из шести правых букв?

Пример: моя строка "PER 343573". Теперь я хочу извлечь только "343573".

Как я могу это сделать?

Ответы [ 21 ]

3 голосов
/ 03 марта 2015

Используйте это:

string mystr = "PER 343573"; int number = Convert.ToInt32(mystr.Replace("PER ",""));

3 голосов
/ 03 августа 2018
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"
3 голосов
/ 14 января 2018

Нулевые безопасные методы:

Строки короче, чем максимальная длина, возвращающая исходную строку

Метод расширения правой строки

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));
2 голосов
/ 24 октября 2017

Другое решение, которое может не упоминаться

S.Substring(S.Length < 6 ? 0 : S.Length - 6)
2 голосов
/ 02 августа 2017

Это метод, который я использую: мне нравится, чтобы все было просто.

private string TakeLast(string input, int num)
{
    if (num > input.Length)
    {
        num = input.Length;
    }
    return input.Substring(input.Length - num);
}
1 голос
/ 09 декабря 2014

Вот решение, которое я использую ... Он проверяет, что длина входной строки не меньше запрашиваемой длины. Решения, которые я вижу выше, не учитывают это, к сожалению, что может привести к сбоям.

    /// <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);
        }
    }
1 голос
/ 31 января 2018

Просто мысль:

public static string Right(this string @this, int length) {
    return @this.Substring(Math.Max(@this.Length - length, 0));
}
0 голосов
/ 13 февраля 2018
//s - your string
//n - maximum number of right characters to take at the end of string
(new Regex("^.*?(.{1,n})$")).Replace(s,"$1")
0 голосов
/ 07 сентября 2017
using Microsoft.visualBasic;

 public class test{
  public void main(){
   string randomString = "Random Word";
   print (Strings.right(randomString,4));
  }
 }

вывод "Слово"

0 голосов
/ 15 июня 2017

Я использую Мин для предотвращения негативных ситуаций, а также для обработки нулевых строк

// <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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...