как разместить - в строке - PullRequest
4 голосов
/ 12 марта 2010

У меня есть строка "8329874566". Я хочу разместить - в строке, как это "832-98-4566"

Какую строковую функцию я могу использовать?

Ответы [ 12 ]

15 голосов
/ 12 марта 2010

Я бы сделал что-то подобное ..

  string value = "8329874566";
  value = value.Insert(6, "-").Insert(3, "-");
13 голосов
/ 12 марта 2010

Вы конвертируете его в число, а затем форматируете строку. Что мне больше всего нравится в этом, так это то, что легче читать / понимать происходящее, чем использовать несколько методов подстроки.

string str = "832984566";
string val = long.Parse(str).ToString("###-##-####");
8 голосов
/ 12 марта 2010

Может быть хитрое, почти нечитаемое решение для регулярных выражений, но это довольно читабельное и простое решение.

Первый параметр метода .Substring () - это место, где вы начинаете получать символы, а второй - это количество символов, которое вы хотите получить, и если вы не задаете его, задается значение по умолчанию в качестве value.length -1 (get chars до конца строки):

String value = "8329874566";

String Result = value.Substring(0,3) + "-" + value.Substring(3,2) + "-" + value.Substring(6);

- [править] -

Только что заметил, что вы не использовали одно из чисел AT ALL (число '7') в приведенном вами примере ожидаемого результата, но если вы хотите, просто измените последнюю подстроку на "5", и если вы хотите «7», но не нужно 5 цифр в последнем наборе, пусть это будет «5,4».

5 голосов
/ 12 марта 2010

Просто из-за полноты, вариант регулярного выражения:

Regex.Replace(s, @"(\d{3})(\d{2})(\d{4})", "$1-$2-$3");

Я считаю вариант Insert самым чистым.

5 голосов
/ 12 марта 2010

Вы пытаетесь сделать это, как американские номера социального страхования? Т.е. с дефисом после третьей и пятой цифр? Если так:

string s = "8329874566";
string t = String.Format("{0}-{1}-{2}", s.Substring(0, 3), s.Substring(3, 2), s.Substring(5));
2 голосов
/ 12 марта 2010

Это отлично работает, и я думаю, что это более понятно:

    String value = "8329874566";
    value = value.Insert(3, "-").Insert(6, "-");

Выводы консоли показывают это: 832-98-74566

0 голосов
/ 12 марта 2010

А как насчет этого для общего решения?

// uglified code to fit within horizontal limits
public static string InsertAtIndices
(this string original, string insertion, params int[] insertionPoints) {

    var mutable = new StringBuilder(original);

    var validInsertionPoints = insertionPoints
        .Distinct()
        .Where(i => i >= 0 && i < original.Length)
        .OrderByDescending(i => i);

    foreach (int insertionPoint in validInsertionPoints)
        mutable.Insert(insertionPoint, insertion);

    return mutable.ToString();
}

Использование:

string ssn = "832984566".InsertAtIndices("-", 3, 5);

string crazy = "42387542342309856340924803"
    .InsertAtIndices(":", 1, 2, 3, 4, 5, 6, 17, 200, -1, -1, 2, 3, 3, 4);

Console.WriteLine(ssn);
Console.WriteLine(crazy);

Выход:

832-98-4566
4: 2: 3: 8: 7: 5: 42342309856: 340924803

Overkill? Да, может быть ...

P.S. Да, я regex неграмотный - кое-что, что я надеюсь когда-нибудь исправить.

0 голосов
/ 12 марта 2010

Простым (но не гибким) подходом было бы зацикливание символов строки при сохранении работы счетчика. Затем вы можете создать новую строку символ за символом. Вы можете добавить символ «-» после 3-го и 5-го символов.

Лучшим подходом может быть использование функции для вставки одного символа в середину строки по определенному индексу. String.Insert () будет хорошо. Единственное, на что следует обратить внимание, это то, что строковые индексы будут сбиваться по одному при каждой вставке.

РЕДАКТИРОВАТЬ более специфично для языка согласно комментариям

0 голосов
/ 12 марта 2010
string val = "832984566";  
string result = String.Format("{0}-{1}-{2}", val.Substring(0,3), val.Substring(3,2), val.Substring(5,4));
0 голосов
/ 12 марта 2010

Вы можете попробовать следующее:

string strNumber = "8329874566"
string strNewNumber = strNumber.Substring(0,3) + "-" + strNumber.Substring(4,2) + "-" strNumber.Substring(6)

или что-то в этом роде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...