Как я заменяю *первая инстанция* строки в.NET?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

103
задан FrankerZ 15 September 2018 в 21:21
поделиться

7 ответов

string ReplaceFirst(string text, string search, string replace)
{
  int pos = text.IndexOf(search);
  if (pos < 0)
  {
    return text;
  }
  return text.Substring(0, pos) + replace + text.Substring(pos + search.Length);
}

Пример:

string str = "The brown brown fox jumps over the lazy dog";

str = ReplaceFirst(str, "brown", "quick");

РЕДАКТИРОВАНИЕ : Как @itsmatt упомянул , существует также Regex. Замена (Строка, Строка, Int32), который может сделать то же, но является, вероятно, более дорогим во времени выполнения, так как это использует полнофункциональный синтаксический анализатор, где мой метод, каждый находит и три конкатенации строк.

EDIT2: Если это - общая задача, Вы могли бы хотеть сделать метод дополнительным методом:

public static class StringExtension
{
  public static string ReplaceFirst(this string text, string search, string replace)
  {
     // ...same as above...
  }
}

Используя вышеупомянутый пример теперь возможно записать:

str = str.ReplaceFirst("brown", "quick");
127
ответ дан Community 24 November 2019 в 04:16
поделиться

И потому что существует также VB.NET для рассмотрения, я хотел бы предложить:

Private Function ReplaceFirst(ByVal text As String, ByVal search As String, ByVal replace As String) As String
    Dim pos As Integer = text.IndexOf(search)
    If pos >= 0 Then
        Return text.Substring(0, pos) + replace + text.Substring(pos + search.Length)
    End If
    Return text 
End Function
4
ответ дан Anthony Potts 24 November 2019 в 04:16
поделиться

Смотрите на Regex. Замена .

16
ответ дан itsmatt 24 November 2019 в 04:16
поделиться

Метод расширения C#, который сделает это:

public static class StringExt
{
    public static string ReplaceFirstOccurrence(this string s, string oldValue, string newValue)
    {
         int i = s.IndexOf(oldValue);
         return s.Remove(i, oldValue.Length).Insert(i, newValue);    
    } 
}

Обладают

8
ответ дан mortenbpost 24 November 2019 в 04:16
поделиться

Как itsmatt сказал Regex. Замена является хорошим выбором для этого однако для создания его ответа больше завершенный, я заполню его с примером кода:

using System.Text.RegularExpressions;
...
Regex regex = new Regex("foo");
string result = regex.Replace("foo1 foo2 foo3 foo4", "bar", 1);             
// result = "bar1 foo2 foo3 foo4"

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

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

62
ответ дан Wes Haggard 24 November 2019 в 04:16
поделиться

В синтаксисе C#:

int loc = original.IndexOf(oldValue);
if( loc < 0 ) {
    return original;
}
return original.Remove(loc, oldValue.Length).Insert(loc, newValue);
8
ответ дан Bill the Lizard 24 November 2019 в 04:16
поделиться
using System.Text.RegularExpressions;

RegEx MyRegEx = new RegEx("F");
string result = MyRegex.Replace(InputString, "R", 1);

найдет первую F в InputString и заменит ее на R.

11
ответ дан 24 November 2019 в 04:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: