C # Как записать конкретную строку в строке? - PullRequest
2 голосов
/ 25 апреля 2019

Я новичок в c # и у меня небольшая проблема.У меня есть string:

string file = "Eep_A5000400A_A4000500A$1000219_Mura_20190409003057.eep";

string name1;
string name2;
string name3;
string name4;

Как получить string позиции

  6..12  ->  "5000400" 
 16..22  ->  "4000500"
 33..36  ->  "Mura" 
 53..55  ->  "eep"

, используя IndexOf или Substring?(file выше только пример, string внутри него может варьироваться ).Например, мой ожидаемый результат:

Console.WriteLine(name1);
Console.WriteLine(name2);
Console.WriteLine(name3);
Console.WriteLine(name4);

Результат:

5000400
4000500
Mura
eep

У вас, ребята, есть идеи?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Простая арифметика должна делать:

string name = file.Substring(startIndex - 1, stopIndex - startIndex + 1);

В вашем случае

name1 = file.Substring( 6 - 1, 12 -  6 + 1);
name2 = file.Substring(16 - 1, 22 - 16 + 1);
name3 = file.Substring(33 - 1, 36 - 33 + 1);
name4 = file.Substring(53 - 1, 55 - 53 + 1);

Возможно, вы захотите реализовать метод расширения для этого:

  public static partial class StringExtensions {
    public static string FromTo(this string value, int fromIndex, int toIndex) { 
      if (null == value)
        throw new ArgumentNullException(nameof(value));
      else if (fromIndex < 1 || fromIndex > value.Length)
        throw new ArgumentOutOfRangeException(nameof(fromIndex));
      else if (toIndex < 1 || toIndex > value.Length || toIndex < fromIndex)
        throw new ArgumentOutOfRangeException(nameof(toIndex));

      return value.Substring(fromIndex - 1, toIndex - fromIndex + 1);
    }
  }

А потом просто, как

  name1 = file.FromTo( 6, 12);
  name2 = file.FromTo(16, 22);
  name3 = file.FromTo(33, 36);
  name4 = file.FromTo(53, 55);
0 голосов
/ 25 апреля 2019

Метод C # String.Substring В C # и .NET строка представляется классом String.Метод String.Substring извлекает подстроку из экземпляра строки в C #.Метод имеет следующие две перегруженные формы.

  1. Substring (Int32) - извлекает подстроку из указанной позиции до конца строки.
  2. Substring (Int32, Int32 - извлекает подстроку из этого экземпляра из указанной позициидля указанной длины.

Поэтому в вашем случае вы можете использовать следующее:

string file = "Eep_A5000400A_A4000500A$1000219_Mura_20190409003057.eep";
string name1 = file.Substring(6, 7); //6..12  ->  "5000400" 
string name2 = file.Substring(16, 7); //16..22  ->  "4000500"
string name3 = file.Substring(33, 4); //33..36  ->  "Mura" 
string name4 = file.Substring(53, 2); //53..55  ->  "eep"
...