Поиск…


Разделение строки по определенному символу

string helloWorld = "hello world, how is it going?";
string[] parts1 = helloWorld.Split(',');

//parts1: ["hello world", " how is it going?"]

string[] parts2 = helloWorld.Split(' ');

//parts2: ["hello", "world,", "how", "is", "it", "going?"]

Получение подстрок заданной строки

string helloWorld = "Hello World!";
string world = helloWorld.Substring(6); //world = "World!"
string hello = helloWorld.Substring(0,5); // hello = "Hello"

Substring возвращает строку вверх из заданного индекса или между двумя индексами (оба включительно).

Определите, начинается ли строка с заданной последовательностью

string HelloWorld = "Hello World";
HelloWorld.StartsWith("Hello"); // true
HelloWorld.StartsWith("Foo"); // false

Поиск строки внутри строки

Используя System.String.Contains вы можете узнать, существует ли определенная строка внутри строки. Метод возвращает логическое значение, true, если строка существует else false.

string s = "Hello World";
bool stringExists = s.Contains("ello");  //stringExists =true as the string contains the substring 

Обрезка нежелательных символов Отключение и / или конец строк.

String.Trim()

string x = "   Hello World!    ";
string y = x.Trim(); // "Hello World!"

string q = "{(Hi!*";
string r = q.Trim( '(', '*', '{' ); // "Hi!"

String.TrimStart() и String.TrimEnd()

string q = "{(Hi*";
string r = q.TrimStart( '{' ); // "(Hi*"
string s = q.TrimEnd( '*' );   // "{(Hi" 

Форматирование строки

Используйте метод String.Format() для замены одного или нескольких элементов в строке строковым представлением указанного объекта:

String.Format("Hello {0} Foo {1}", "World", "Bar") //Hello World Foo Bar

Объединение массива строк в новый

var parts = new[] { "Foo", "Bar", "Fizz", "Buzz"};
var joined = string.Join(", ", parts);

//joined = "Foo, Bar, Fizz, Buzz"

Заполнение строки до фиксированной длины

string s = "Foo";
string paddedLeft = s.PadLeft(5);        // paddedLeft = "  Foo" (pads with spaces by default)
string paddedRight = s.PadRight(6, '+'); // paddedRight = "Foo+++"
string noPadded = s.PadLeft(2);          // noPadded = "Foo" (original string is never shortened)

Построить строку из массива

Метод String.Join поможет нам построить строку из массива / списка символов или строки. Этот метод принимает два параметра. Первый - разделитель или разделитель, который поможет вам разделить каждый элемент массива. И вторым параметром является сам массив.

Строка из char array :

string delimiter=",";
char[] charArray = new[] { 'a', 'b', 'c' };
string inputString = String.Join(delimiter, charArray);

Выход : a,b,c если мы изменим delimiter как "" тогда выход станет abc .

Строка из List of char :

string delimiter = "|";
List<char> charList = new List<char>() { 'a', 'b', 'c' };
string inputString = String.Join(delimiter, charList);

Выход : a|b|c

Строка из List of Strings :

string delimiter = " ";
List<string> stringList = new List<string>() { "Ram", "is", "a","boy" };
string inputString = String.Join(delimiter, stringList);

Результат : Ram is a boy

Строка из array of strings :

string delimiter = "_";
string[] stringArray = new [] { "Ram", "is", "a","boy" };
string inputString = String.Join(delimiter, stringArray);

Выход : Ram_is_a_boy

Форматирование с использованием ToString

Обычно мы используем метод String.Format для целей форматирования, .ToString обычно используется для преобразования других типов в строку. Мы можем указать формат вместе с методом ToString во время преобразования, поэтому мы можем избежать дополнительного форматирования. Позвольте мне объяснить, как он работает с разными типами;

Целое число в отформатированную строку:

int intValue = 10;
string zeroPaddedInteger = intValue.ToString("000"); // Output will be "010"
string customFormat = intValue.ToString("Input value is 0"); // output will be   "Input value is 10" 

дважды в отформатированную строку:

double doubleValue = 10.456;
string roundedDouble = doubleValue.ToString("0.00"); // output 10.46
string integerPart = doubleValue.ToString("00");    // output 10
string customFormat = doubleValue.ToString("Input value is 0.0");  // Input value is 10.5

Форматирование DateTime с использованием ToString

DateTime currentDate = DateTime.Now; //  {7/21/2016 7:23:15 PM}
string dateTimeString = currentDate.ToString("dd-MM-yyyy HH:mm:ss"); // "21-07-2016 19:23:15"
string dateOnlyString = currentDate.ToString("dd-MM-yyyy"); // "21-07-2016"
string dateWithMonthInWords = currentDate.ToString("dd-MMMM-yyyy HH:mm:ss"); // "21-July-2016 19:23:15"

Получение символов x с правой стороны строки

Visual Basic имеет функции Left, Right и Mid, которые возвращают символы из левой, правой и средней строки. Эти методы не существуют в C #, но могут быть реализованы с помощью Substring() . Они могут быть реализованы как методы расширения, такие как:

   public static class StringExtensions
   {
      /// <summary>
      /// VB Left function
      /// </summary>
      /// <param name="stringparam"></param>
      /// <param name="numchars"></param>
      /// <returns>Left-most numchars characters</returns>
      public static string Left( this string stringparam, int numchars )
      {
         // Handle possible Null or numeric stringparam being passed
         stringparam += string.Empty;
    
         // Handle possible negative numchars being passed
         numchars = Math.Abs( numchars );
    
         // Validate numchars parameter        
         if (numchars > stringparam.Length)
            numchars = stringparam.Length;
    
         return stringparam.Substring( 0, numchars );
      }
    
      /// <summary>
      /// VB Right function
      /// </summary>
      /// <param name="stringparam"></param>
      /// <param name="numchars"></param>
      /// <returns>Right-most numchars characters</returns>
      public static string Right( this string stringparam, int numchars )
      {
         // Handle possible Null or numeric stringparam being passed
         stringparam += string.Empty;
    
         // Handle possible negative numchars being passed
         numchars = Math.Abs( numchars );
    
         // Validate numchars parameter        
         if (numchars > stringparam.Length)
            numchars = stringparam.Length;
    
         return stringparam.Substring( stringparam.Length - numchars );
      }
    
      /// <summary>
      /// VB Mid function - to end of string
      /// </summary>
      /// <param name="stringparam"></param>
      /// <param name="startIndex">VB-Style startindex, 1st char startindex = 1</param>
      /// <returns>Balance of string beginning at startindex character</returns>
      public static string Mid( this string stringparam, int startindex )
      {
         // Handle possible Null or numeric stringparam being passed
         stringparam += string.Empty;
    
         // Handle possible negative startindex being passed
         startindex = Math.Abs( startindex );
    
         // Validate numchars parameter        
         if (startindex > stringparam.Length)
            startindex = stringparam.Length;
         
         // C# strings are zero-based, convert passed startindex
         return stringparam.Substring( startindex - 1 );
      }
    
      /// <summary>
      /// VB Mid function - for number of characters
      /// </summary>
      /// <param name="stringparam"></param>
      /// <param name="startIndex">VB-Style startindex, 1st char startindex = 1</param>
      /// <param name="numchars">number of characters to return</param>
      /// <returns>Balance of string beginning at startindex character</returns>
      public static string Mid( this string stringparam, int startindex, int numchars)
      {
         // Handle possible Null or numeric stringparam being passed
         stringparam += string.Empty;
    
         // Handle possible negative startindex being passed
         startindex = Math.Abs( startindex );
    
         // Handle possible negative numchars being passed
         numchars = Math.Abs( numchars );
    
         // Validate numchars parameter        
         if (startindex > stringparam.Length)
            startindex = stringparam.Length;
    
         // C# strings are zero-based, convert passed startindex
         return stringparam.Substring( startindex - 1, numchars );

       }
    }

Этот метод расширения можно использовать следующим образом:

string myLongString = "Hello World!";
string myShortString = myLongString.Right(6);  // "World!"
string myLeftString = myLongString.Left(5);    // "Hello"
string myMidString1 = myLongString.Left(4);    // "lo World"
string myMidString2 = myLongString.Left(2,3);    // "ell"

Проверка пустой строки с помощью String.IsNullOrEmpty () и String.IsNullOrWhiteSpace ()

string nullString = null;
string emptyString = "";
string whitespaceString = "    ";
string tabString = "\t";
string newlineString = "\n";
string nonEmptyString = "abc123";

bool result;

result = String.IsNullOrEmpty(nullString);            // true
result = String.IsNullOrEmpty(emptyString);           // true
result = String.IsNullOrEmpty(whitespaceString);      // false
result = String.IsNullOrEmpty(tabString);             // false
result = String.IsNullOrEmpty(newlineString);         // false
result = String.IsNullOrEmpty(nonEmptyString);        // false

result = String.IsNullOrWhiteSpace(nullString);       // true
result = String.IsNullOrWhiteSpace(emptyString);      // true
result = String.IsNullOrWhiteSpace(tabString);        // true
result = String.IsNullOrWhiteSpace(newlineString);    // true
result = String.IsNullOrWhiteSpace(whitespaceString); // true
result = String.IsNullOrWhiteSpace(nonEmptyString);   // false

Получение символа по определенному индексу и перечисление строки

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

string s = "hello";
char c = s[1]; //Returns 'e'

Обратите внимание, что тип возврата - char , в отличие от метода Substring который возвращает тип string .

Вы также можете использовать индексатор для итерации по символам строки:

string s = "hello";
foreach (char c in s)
    Console.WriteLine(c);
/********* This will print each character on a new line:
h
e
l
l
o
**********/

Преобразование десятичного числа в двоичный, восьмеричный и шестнадцатеричный формат

  1. Для преобразования десятичного числа в двоичный формат используйте base 2

    Int32 Number = 15;
    Console.WriteLine(Convert.ToString(Number, 2));  //OUTPUT : 1111
    
  2. Для преобразования десятичного числа в восьмеричный формат используйте базу 8

    int Number = 15;
    Console.WriteLine(Convert.ToString(Number, 8));  //OUTPUT : 17
    
  3. Для преобразования десятичного числа в шестнадцатеричный формат используйте базу 16

    var Number = 15;
    Console.WriteLine(Convert.ToString(Number, 16));  //OUTPUT : f
    

Разделение строки другой строкой

string str = "this--is--a--complete--sentence";
string[] tokens = str.Split(new[] { "--" }, StringSplitOptions.None);

Результат:

["this", "is", "a", "complete", "sentence"]

Правильное изменение строки

В большинстве случаев, когда людям приходится менять строку, они делают это более или менее:

char[] a = s.ToCharArray();
System.Array.Reverse(a);
string r = new string(a);

Однако эти люди не понимают, что это на самом деле неправильно.
И я не имею ввиду из-за отсутствия проверки NULL.

Это на самом деле неправильно, потому что Glyph / GraphemeCluster может состоять из нескольких кодовых точек (например, символов).

Чтобы понять, почему это так, мы сначала должны знать о том, что на самом деле означает термин «характер».

Ссылка:

Характер - это перегруженный термин, чем может означать много вещей.

Кодовая точка - это атомная единица информации. Текст - это последовательность кодовых точек. Каждая кодовая точка - это номер, который задается стандартом Unicode.

Графема представляет собой последовательность из одной или нескольких кодовых точек, которые отображаются как единое графическое устройство, которое читатель распознает как один элемент системы письма. Например, и a, и ä являются графемами, но они могут состоять из нескольких кодовых точек (например, ä может быть двумя кодовыми точками, один для базового символа a, за которым следует один для diareis, но есть и альтернативный, устаревший, один код точка, представляющая эту графему). Некоторые кодовые точки никогда не являются частью какой-либо графемы (например, нулевой ширины без участия или переопределения направления).

Глиф представляет собой изображение, обычно хранящееся в шрифте (который представляет собой набор глифов), используемый для представления графемов или их частей. Шрифты могут составлять несколько глифов в одно представление, например, если вышеуказанная ä является одной кодовой точкой, шрифт может выбрать, чтобы отобразить это как два отдельных, пространственно перекрытых глифа. Для OTF таблицы GSUB и GPOS шрифта содержат информацию о замещении и позиционировании, чтобы сделать эту работу. Шрифт может содержать несколько альтернативных глифов для одной и той же графемы.

Таким образом, в C # символ на самом деле является CodePoint.

Это означает, что если вы просто отмените действительную строку, например Les Misérables , которая может выглядеть так

string s = "Les Mise\u0301rables";

как последовательность символов, вы получите:

selbaŕesiM seL

Как вы можете видеть, акцент делается на символе R вместо символа e.
Хотя string.reverse.reverse даст исходную строку, если вы оба раза измените массив символов, этот вид разворота определенно НЕ является обратным исходной строке.

Вам нужно только отменить каждый GraphemeCluster.
Итак, если все сделано правильно, вы можете изменить строку следующим образом:

    private static System.Collections.Generic.List<string> GraphemeClusters(string s)
    {
        System.Collections.Generic.List<string> ls = new System.Collections.Generic.List<string>();

        System.Globalization.TextElementEnumerator enumerator = System.Globalization.StringInfo.GetTextElementEnumerator(s);
        while (enumerator.MoveNext())
        {
            ls.Add((string)enumerator.Current);
        }

        return ls;
    }


    // this 
    private static string ReverseGraphemeClusters(string s)
    {
        if(string.IsNullOrEmpty(s) || s.Length == 1)
             return s;
        
        System.Collections.Generic.List<string> ls = GraphemeClusters(s);
        ls.Reverse();

        return string.Join("", ls.ToArray());
    }

    public static void TestMe()
    {
        string s = "Les Mise\u0301rables";
        // s = "noël";
        string r = ReverseGraphemeClusters(s);

        // This would be wrong:
        // char[] a = s.ToCharArray();
        // System.Array.Reverse(a);
        // string r = new string(a);

        System.Console.WriteLine(r);
    }

И - о, радость - вы поймете, что если вы сделаете это правильно, это также будет работать для азиатских / южноазиатских / восточно-азиатских языков (и французского / шведского / норвежского и т. Д.) ...

Замена строки в строке

Используя метод System.String.Replace , вы можете заменить часть строки другой строкой.

string s = "Hello World";
 s = s.Replace("World", "Universe"); // s = "Hello Universe"

Все вхождения строки поиска заменяются.

Этот метод также можно использовать для удаления части строки, используя поле String.Empty :

string s = "Hello World";
s = s.Replace("ell", String.Empty); // s = "Ho World"

Изменение случая символов внутри строки

Класс System.String поддерживает ряд методов для преобразования между строчными и строчными символами в строке.

  • System.String.ToLowerInvariant используется для возврата объекта String, преобразованного в нижний регистр.
  • System.String.ToUpperInvariant используется для возврата объекта String, преобразованного в верхний регистр.

Примечание . Причина использования инвариантных версий этих методов заключается в предотвращении создания неожиданных букв, специфичных для конкретной культуры. Это объясняется здесь подробно .

Пример:

string s = "My String";
s = s.ToLowerInvariant(); // "my string"
s = s.ToUpperInvariant(); // "MY STRING"

Обратите внимание, что вы можете указать конкретную Культуру при преобразовании в строчные и прописные буквы, используя методы String.ToLower (CultureInfo) и String.ToUpper (CultureInfo) соответственно.

Объединение массива строк в одну строку

Метод System.String.Join позволяет объединить все элементы в массив строк, используя указанный разделитель между каждым элементом:

string[] words = {"One", "Two", "Three", "Four"};
string singleString = String.Join(",", words); // singleString = "One,Two,Three,Four"

Конкатенация строк

Конкатенация строк может быть выполнена с помощью метода System.String.Concat или (намного проще) с помощью оператора + :

string first = "Hello ";
string second = "World";

string concat = first + second; // concat = "Hello World"
concat = String.Concat(first, second); // concat = "Hello World"

В C # 6 это можно сделать следующим образом:

string concat = $"{first},{second}";


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow