2015-08-31 4 views
1

У меня есть входная строка, которая получает положить в результат, который затем преобразуется в полукокса [] оттуда я сделал первую букву прописной буквы. Мой вопрос заключается в утверждении for, я пытаюсь поставить пробел перед каждой заглавной буквой. Не определено Вставить() по причине char [] Что это за замена для этого?C# Работы с непечатаемыми

У меня также есть проблема, заключающаяся в том, что моя первая буква - это столица, в которой будет введено пространство для первого слова. Как я могу решить эту проблему и внедрить ее в свой код.

Пример:

"HelloThere"

Выход

"Привет Там"

ли я вставить его в новое имя строки? и вернуть это вместо вывода, например. char [] final будет окончательным возвратом.

Наконец, нужно добавить пробелы перед каждым капиталом, Как я могу применить правило, допускающее только 1 пробел?

+0

Попробуйте заменить ваши двойные кавычки \ речевые метки для одиночных кавычек, так как это указывает на символ –

+0

. Замечание: код был бы простым, если бы вы могли использовать 'StringBuilder' ... Альтернативно простое сопоставление регулярных выражений {lowerCase, upperCase} пара превратит его в одно утверждение. –

+0

@AlexeiLevenkov Я новичок в этом, если бы вы могли использовать мой код в качестве примера и опубликовать ответ было бы здорово спасибо – XCode

ответ

2

Я хотел бы использовать регулярное выражение для вставки пробелов перед каждым заглавной буквой:

var result = "HelloThere"; 
Console.WriteLine(Regex.Replace(result, @"\s*(\p{Lu})", " $1")); 

Заметь, что \s* матчей 0 или более пробельные символы, а \p{Lu} соответствует любому Unicode прописных букв. Заглавная буква записывается в группу 1, а пространство добавляется перед строкой букв в верхнем регистре с помощью строки замены.

См IDEONE demo

Не забудьте добавить директиву using System.Text.RegularExpressions.

Вот full example с регулярным выражением, объявленной в статическом классе:

public static void Main() 
{ 
    var result = "HelloThere"; 
    Console.WriteLine(Regexes.rxAddSpaceBeforeCapital.Replace(result, " $1")); 
    result = "Hello There"; 
    Console.WriteLine(Regexes.rxAddSpaceBeforeCapital.Replace(result, " $1")); 
} 

public static class Regexes 
{ 
    public static readonly Regex rxAddSpaceBeforeCapital = new Regex(@"\s*(\p{Lu})", RegexOptions.Compiled);  
} 
+0

Из кода, если Regex.Replace (result, @ "(\ S) (\ p {Lu }) "," $ 1 $ 2 ")); выполняет ли функция цикла for for, как я могу реализовать это для своего кода? – XCode

+0

Например, если мое перемещение имеет двойное пространство, как я могу применить правило каждого пространства, должно быть только 1 пробел. – XCode

+0

Что возможно, образцы входных строк? Я вижу, что я, возможно, немного неправильно понял цель: вам нужно добавить пространство даже в начале строки, правильно? –

1

Попробуйте использовать ниже код, он заменит белое пространство между каждыми словами Camel Case:

var inputStr= "HemantPatel"; 
var result = Regex.Replace(inputStr, "([a-z])([A-Z])", @"$1 $2"); //Category Name 

выход будет : «Hemant Patel»

+0

скомпилирует? – Grozz

0

Если вы хотите, чтобы ваш код был похож на предложенный вами вариант, попробуйте это, в противном случае выберите одно из других кратких хороших решений предложил:

// Example string. 
string result = "  helloThere, ThisIs  AnExampleString  "; 
// Remove leading and trailing white spaces. 
result = result.Trim(); 
// Capitalize first letter. 
result = char.ToUpper(result[0]) + result.Substring(1); 

// Replace long white spaces with just one white space, 
// e.g. "Hello  World" -> "Hello World" 
result = Regex.Replace(result, @"[ ]{2,}", " "); 

// Insert spaces before capital letters. 
for (var i = 1; i < result.Length; i++) 
{ 
    if (char.IsLower(result[i - 1]) && char.IsUpper(result[i])) 
    { 
     result = result.Insert(i, " "); 
    } 
} 
// OUTPUT: "Hello There, This Is An Example String" 

Кстати, в вашем коде метод Insert не работает, потому что это метод расширения, который не определен для типа char[].

Смежные вопросы